尝试在java之后创建一个带有.split和null值的数组

时间:2015-12-05 17:46:49

标签: java arrays

我尝试使用带有空值的.split函数来保持数组20大。

我应该看到:

String[] N = new String[20];
String M = "hello world tHIS is random 123123 text";
    N = M.split("\\s+", -1);
System.out.println(Arrays.asList(N));

输出:

"hello, world, tHIS, is, random, 123123, text, null, null, null, null, null, null, null, null, null, null, null, null, null"

但我得到了:

"hello world tHIS is random 123123 text"

无论M值有多长,如何将数组保持为20?

4 个答案:

答案 0 :(得分:0)

您要将N重新分配给M.如果要保留所有空值,则需要单独保存拆分字符串并在其上循环以将每个索引分配给N.

答案 1 :(得分:0)

您可以使用Arrays.copyOf方法并将长度设置为20.正如JavaDoc所说,它使用空值填充数组,就像您需要它一样:

int length = 20;
String[] N = new String[length];
String M = "hello world tHIS is random 123123 text";
N = Arrays.copyOf(M.split("\\s+", -1), length);
System.out.println(Arrays.asList(N));

输出:

  

[你好,世界,tHIS,是,随机,123123,文本,null,null,null,null,null,null,null,null,null,null,null,null,null]

答案 2 :(得分:0)

您可以使用StringTokenizer来实现此目的:

StringTokenizer st = new StringTokenizer(M);
for (int i = 0; i < N.length && st.hasMoreTokens(); ++i) {
    N[i] = st.nextToken();
}

虽然文档说:

  

StringTokenizer是为保持兼容性而保留的旧类   原因虽然在新代码中不鼓励使用

这似乎是您的用例的一个很好的匹配,因为您避免复制split的结果。

答案 3 :(得分:0)

.split方法创建一个具有确切长度的新数组,并保存其引用。您应该调整生成的数组的大小。 (它并没有真正调整数组的大小,而是使用正确的长度创建它的副本,并将其保存到与以前相同的变量中):

String M = "hello world tHIS is random 123123 text";
String[] N = M.split("\\s+", -1);
N = Arrays.copyOf(N, 20);
System.out.println(Arrays.asList(N));