将动态数组拆分为多个数组

时间:2015-06-20 06:26:54

标签: java arrays dynamic arraylist

我正在尝试将未知长度的动态数组拆分为多个部分,并将所有部分作为数组列表返回,每个数组都在给定长度的列表中。我在这里搜索了一个解决方案,但只遇到了固定长度数组的解决方案。我有一个打击它并提出这个:

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;
}

1 个答案:

答案 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将是已编入索引20的字符串1长度数组。

然后在System.arraycopy(input, place, part, place2, splitSize);行中,您正在尝试复制part的{​​{1}}索引中的内容。因此2发生了。

可以帮助你:

ArrayIndexOutOfBoundsException