有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图将一个未知长度的动态数组拆分为多个部分,并将所有部分作为数组列表返回,每个数组都位于给定长度的列表中。我在这里搜索了一个解决方案,但只找到了固定长度数组的解决方案。我试了一下,想出了这个:

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

共 (1) 个答案

  1. # 1 楼答案

    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复制到索引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);
        }
    }