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

Splitting a dynamic array into multiple arrays

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

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

我总是遇到越界错误,但我不确定哪里错了。任何帮助将不胜感激,谢谢!

编辑:: 对于那些使用谷歌搜索并寻找快速答案的人,此方法拆分您的标准数组并将剩余部分添加到末尾:

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

EDIT 因为 OP 更改了代码:

你的问题就在这里,

int place2 = splitSize;

您正在用 splitSize 分配 place2,然后创建一个新的字符串数组,如

String[] part = new String[splitSize];

然后,您正在尝试将 input 复制到索引 splitSize 中的 part。请记住,数组是零索引的。

说,splitSize = 2。然后 part 将是长度为 2 的字符串数组,索引为 01.

然后在 System.arraycopy(input, place, part, place2, splitSize); 行中,您正试图复制 part2 索引中的内容。因此 ArrayIndexOutOfBoundsException 发生了。

这可能对您有帮助:

import java.util.ArrayList;

public class SplitArray {
    private static ArrayList<String> list = new ArrayList<String>();

    public static ArrayList<String> split(String input, int splitSize) {
        int place = 0;

        for (int i = 0; i < input.length() / splitSize; i++) {
            String part = input.substring(place, place + splitSize);

            list.add(part);

            place += splitSize;
        }
        return list;
    }

    public static void main(String[] args) {
        String input = "aabbcc";
        split(input, 2);
    }
}