在java中将字符串数组转换为锯齿状数组

时间:2016-04-30 23:57:49

标签: java

我有一维值数组,我需要帮助使用锯齿状数组分组这些值,以便进行一系列计算。 e.g。

int array []={1 2 3 4 5 6 7 8 9 10} 

我想分离并分配一个数组中的前4个,另一个数组中的下一个3,然后是第三个数组中的最后3个。我希望在我的代码中得到这样的输出。

int [][] x = new int [3][];

x[0] = new int [4];
x[0] = {1 2 3 4};

x[1] = new int [3];
x[1] = {5 6 7};

x[2] = new int [3];
x[2] = {8 9 10};

有没有其他方法可以使用灵活的for循环制作这个锯齿状数组,并且我可以将这个数组拆分为M个组或组中的N个值? 我尝试使用substring()访问这些值,但我不太清楚如何继续这样做或者我是否正确地执行此操作。

 for( int i=0; i<x.length; i++) { 
 x [i]= array.substring (0,3);
 x [i]=array.substring (4,6);
 x [i]=array.substring(7,9);
 }

我只是编程新手,但这段代码显然是错误的,但是你能帮助我吗?谢谢。

3 个答案:

答案 0 :(得分:0)

你是否在System.arraycopy()之后?

x[0] = new int[4];
System.arraycopy(array, 0, x[0], 0, 4);
x[1] = new int[3];
System.arraycopy(array, 4, x[1], 0, 3);
x[2] = new int[3];
System.arraycopy(array, 7, x[2], 0, 3);

如果没有,你的问题可能有点误导。子阵列的大小应该来自哪里?

或者这更像你想要的?

int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int xLength = 3;
int[][] x = new int[xLength][];
int arrayLength = array.length;
int remainders = arrayLength % xLength;
int subArrayLength = arrayLength / xLength;
int arrayIndex = 0;
for (int i = 0; i < arrayLength; i++)
{
    int adjustedSubArrayLength = subArrayLength;
    if (remainders > 0)
    {
        adjustedSubArrayLength++;
        remainders--;
    }
    x[i] = new int[adjustedSubArrayLength];
    System.arraycopy(array, arrayIndex, x[i], 0, adjustedSubArrayLength);
    arrayIndex = adjustedSubArrayLength;
}

答案 1 :(得分:0)

因此,在创建数组后,您无法在Java中更改数组的大小,您需要可以存储数据的新数组。有一个静态System函数,它允许您复制一个名为System.arraycopy(src, srcPos, dest, destPos, length)的数组的特定长度

答案 2 :(得分:0)

试试这个。

static int[][] to2dArray(int[] array, int... colSizes) {
    int[][] result = new int[colSizes.length][];
    for (int i = 0, start = 0; i < colSizes.length; start += colSizes[i++])
        result[i] = Arrays.copyOfRange(array, start, start + colSizes[i]);
    return result;
}

int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println(Arrays.deepToString(to2dArray(array, 4, 3, 3)));
// -> [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]