我尝试使用带有空值的.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?
答案 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));