我正在尝试将未知长度的动态数组拆分为多个部分,并将所有部分作为数组列表返回,每个数组都在给定长度的列表中。我在这里搜索了一个解决方案,但只遇到了固定长度数组的解决方案。我有一个打击它并提出这个:
private static ArrayList<String[]> list = new ArrayList<String[]>();
public static ArrayList<String[]> split(String input[], int splitSize){
int place = 0;
int place2 = splitSize;
for(int i = 0; i < input.length/splitSize; i++){
String[] part = new String[splitSize];
System.arraycopy(input, place, part, place2, splitSize);
place = place + splitSize;
place2 = place2 + splitSize;
System.arraycopy(input, place, part, place2, splitSize);
list.add(part);
}
return list;
}
我不断出错,但我不确定哪里出错了。任何帮助都会非常感谢,谢谢!
EDIT :: 对于谷歌搜索和寻找快速答案的人,这种方法分割您的标准数组并将剩余物添加到最后:
public static String[][] split(String[] input, int splitSize) {
int numOfSplits = (int)Math.ceil((double)input.length / splitSize);
String[][] output = new String[numOfSplits][];
for(int i = 0; i < numOfSplits; ++i) {
int start = i * splitSize;
int length = Math.min(input.length - start, splitSize);
String[] part = new String[length];
System.arraycopy(input, start, part, 0, length);
output[i] = part;
}
return output;
}
答案 0 :(得分:2)
String[] leftover = null;
System.arraycopy(input, place, leftover, place2, splitSize);
如何在null
数组中复制内容?
请参阅javadoc,
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
抛出:
NullPointerException - if either src or dest is null.
编辑,因为OP更改了代码:
你的问题在这里,
int place2 = splitSize;
您正在为place2
分配splitSize
,然后创建新的字符串数组,例如
String[] part = new String[splitSize];
然后,您尝试将input
复制到索引part
中的splitSize
。请记住,数组是零索引。
说,splitSize = 2
。然后,part
将是已编入索引2
和0
的字符串1
长度数组。
然后在System.arraycopy(input, place, part, place2, splitSize);
行中,您正在尝试复制part
的{{1}}索引中的内容。因此2
发生了。
可以帮助你:
ArrayIndexOutOfBoundsException