Java - Как разделить массив на четыре отдельных массива? - PullRequest
0 голосов
/ 12 марта 2012

У меня есть массив, который содержит строку чисел, таких как: 1011

и я хотел разделить его на четыре отдельных массива, содержащих каждое из этих значений. Как мне это сделать?

String [] array = {1,0,1,1}; 

//would I do something like this:

array.substring(0,4)

Ответы [ 4 ]

3 голосов
/ 12 марта 2012

Вы должны иметь возможность использовать Arrays.copyOfRange (...) для этого.

1 голос
/ 12 марта 2012

Вариант 1 будет просто создать новый массив для каждого элемента в массиве, который у вас есть ... можно сделать в общем случае так:

public <T> List<T[]> splitEachItemIntoOwnArray(T[] original) {
  List<T[]> result = new ArrayList<T[]>();
  if (original == null) return result;

  for (T t : original) {
    result.add((T[])new Object[] {t});
  }

  return result;
}

Вариант 2, вы также можете достичь этого с помощьюметод Arrays.copyOfRange ():

public <T> List<T[]> splitEachItemIntoOwnArray2(T[] original) {
    List<T[]> result = new ArrayList<T[]>();
    if (original == null) return result;

    for (int i = 0; i < original.length; i++) {
        result.add(Arrays.copyOfRange(original,i,i+1));
    }

    return result;
}

Параметры 1 и 2 работают, если вы всегда хотите, чтобы каждый элемент исходного массива разделялся на собственный массив.Если вы хотите, чтобы все N элементов исходного массива были разделены на свои, это должно работать:

public <T> List<T[]> splitEachItemIntoOwnArray2(T[] original, int size) {
    List<T[]> result = new ArrayList<T[]>();
    if (original == null) return result;

    int curPos = 0;
    while (curPos < original.length) {
        int remaining = original.length - curPos+1;
        if (remaining <= size) {
            result.add(Arrays.copyOfRange(original,curPos,original.length));
        } else {
            result.add(Arrays.copyOfRange(original,curPos,curPos+size));
        }
        curPos += size;
    }

    return result;
}
0 голосов
/ 12 марта 2012
public static void main(String[] args) {
  int[] array = {1,0,1,1}; 
    int[] array1 = Arrays.copyOfRange(array, 0, 1);
    int[] array2 = Arrays.copyOfRange(array, 1, 2);
    int[] array3 = Arrays.copyOfRange(array, 2, 3);
    int[] array4 = Arrays.copyOfRange(array, 3, 4);
    System.out.println(array1[0]);
    System.out.println(array2[0]);
    System.out.println(array3[0]);
    System.out.println(array4[0]);
}
0 голосов
/ 12 марта 2012

Афаик не разделяется, но вы можете скопировать его в новые массивы, используя диапазон

проверить copyOfRange

static <T,U> T[] copyOfRange(U[] original, int from, int to, Class<? extends T[]> newType)

использование следует:

String [] array = {1,0,1,1}; 
// Copies from element 0 to 0
String[] array1 = Arrays.copyOfRange(array, 0, 0);
...