如何在java中将字符串数组拆分为小块数组?

以下是需要帮助的代码段示例

例:

[1,2,3,4,5] 
  • 如果块大小为1[1,2,3,4,5]
  • 如果块大小为2[1,2][3,4][5]
  • 如果块大小为3[1,2,3][4,5]
  • 如果块大小是4[1,2,3,4][5]

Java(来自评论):

 int counter = 0; for (int i=0; i<array.length; i++) { if (count == chunksize) { //do something and initialize counter = 0; } counter++; } 

你可以使用Arrays.copyOfRange(int[] original, int from, int to)代码可能是这样的:

 int chunk = 2; // chunk size to divide for(int i=0;i 

在遇到同样的问题之后,偶然发现了这篇文章。 这是我解决它的方式(我使用了Arrays.copyOfRange()

 public static int[][] splitArray(int[] arrayToSplit, int chunkSize){ if(chunkSize<=0){ return null; // just in case :) } // first we have to check if the array can be split in multiple // arrays of equal 'chunk' size int rest = arrayToSplit.length % chunkSize; // if rest>0 then our last array will have less elements than the others // then we check in how many arrays we can split our input array int chunks = arrayToSplit.length / chunkSize + (rest > 0 ? 1 : 0); // we may have to add an additional array for the 'rest' // now we know how many arrays we need and create our result array int[][] arrays = new int[chunks][]; // we create our resulting arrays by copying the corresponding // part from the input array. If we have a rest (rest>0), then // the last array will have less elements than the others. This // needs to be handled separately, so we iterate 1 times less. for(int i = 0; i < (rest > 0 ? chunks - 1 : chunks); i++){ // this copies 'chunk' times 'chunkSize' elements into a new array arrays[i] = Arrays.copyOfRange(arrayToSplit, i * chunkSize, i * chunkSize + chunkSize); } if(rest > 0){ // only when we have a rest // we copy the remaining elements into the last chunk arrays[chunks - 1] = Arrays.copyOfRange(arrayToSplit, (chunks - 1) * chunkSize, (chunks - 1) * chunkSize + rest); } return arrays; // that's it } 

结果如下:

 chunkSize = 1 [1] [2] [3] [4] [5] chunkSize = 2 [1, 2] [3, 4] [5] chunkSize = 3 [1, 2, 3] [4, 5] chunkSize = 4 [1, 2, 3, 4] [5] chunkSize = 5 [1, 2, 3, 4, 5] chunkSize = 6 [1, 2, 3, 4, 5] 

通常,您可以使用Arrays.copyOfRange进行复制

尝试这个,

迭代它并检查以提供块大小。

 int chunkSize = userInput; 

//迭代并检查条件

 char[] resultArray = Arrays.copyOfRange(inputArray, start, end); start = start + end; // check whether the start will exceeds the length of the array 

使用纯Java 8:

 public class Chunk { public static void main(String[] args) { int[] input = {1,2,3,4,78,999,-1,456}; int chunkSize = 3; int[][] chunked = chunk(input, chunkSize); Arrays.stream(chunked) .map(Arrays::toString) .forEach(System.out::println); } public static int[][] chunk(int[] input, int chunkSize) { return IntStream.iterate(0, i -> i + chunkSize) .limit((long) Math.ceil((double) input.length / chunkSize)) .mapToObj(j -> Arrays.copyOfRange(input, j, j + chunkSize > input.length ? input.length : j + chunkSize)) .toArray(int[][]::new); } } [1, 2, 3] [4, 78, 999] [-1, 456] 

这应该可以解决问题

 public static List split(String string, int chunk) { Pattern pattern = Pattern.compile("(([0-9]+,){" + (chunk - 1) + "}[0-9]+)|[0-9]+"); Matcher matcher = pattern.matcher(string); List result = new ArrayList(); while (matcher.find()) result.add("[" + matcher.group() + "]"); return result; } 

测试代码:

 for (int chunkSize = 1; chunkSize < 6; ++chunkSize) { System.out.println("test for chunk size: " + chunkSize); for (String string : split("[1,2,3,4,5]", chunkSize)) System.out.format("\t%s\n", string); } 

输出:

 test for chunk size: 1 [1] [2] [3] [4] [5] test for chunk size: 2 [1,2] [3,4] [5] test for chunk size: 3 [1,2,3] [4] [5] test for chunk size: 4 [1,2,3,4] [5] test for chunk size: 5 [1,2,3,4,5] 
 public static int[][] chunkArray(int[] array, int chunkSize) { // first we need to get number of chunks by dividing length by chunkSize. int numOfChunks = (int)Math.ceil((double)array.length / chunkSize); // we declare 2d array to save in the chunks int[][] output = new int[numOfChunks][]; for(int i = 0; i < numOfChunks; i++) { int start = i * chunkSize; int length = Math.min(array.length - start, chunkSize); int[] temp = new int[length]; System.arraycopy(array, start, temp, 0, length); output[i] = temp; } return output; }