将动态数组分割成多个数组

3
我想把一个长度未知的动态数组分成多个部分,并将所有部分作为数组列表返回,每个数组的长度为给定长度。我在这里搜索了解决方案,但只找到了针对固定长度数组的解决方案。我已经尝试过并想出了以下方法:
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;
}

列表是在类中初始化的数组列表,private static ArrayList<String[]> list = new ArrayList<String[]>(); - Defa1t
请发布最少量的代码,以解决您所提出的问题,并且代码不含歧义。 - mazhar islam
1个回答

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.

编辑 由于原帖作者更改了代码:

你的问题出在这里,

int place2 = splitSize;

你正在使用 splitSizeplace2 赋值,然后创建一个新的字符串数组,如下所示:
String[] part = new String[splitSize];

然后,你正试图将input复制到索引为splitSizepart中。请记住,数组是从零开始索引的。
假设splitSize = 2,那么part将成为一个长度为2的字符串数组,索引为01
然后,在第System.arraycopy(input, place, part, place2, splitSize);行中,你试图将某些内容复制到part的第2个索引中。因此导致了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);
    }
}

谢谢 :) 我根据您的建议想出了另一种使用二维数组的方法,我会将其留在我的原始问题中,供那些遇到相同问题并寻找答案的人参考! - Defa1t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接