Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在每N个字拆分一个字符串数组?_Java_Arrays_String - Fatal编程技术网

Java 如何在每N个字拆分一个字符串数组?

Java 如何在每N个字拆分一个字符串数组?,java,arrays,string,Java,Arrays,String,我被一个可能很简单的想法难住了。我正在使用BufferedReader读取文本文件,并在空白处拆分字符串。我需要创建一个新的字符串数组,并将前一个数组中的新元素按3字分组,例如{the,quick,brown,fox,jumped,over,the,lazy,cat}⇒ {敏捷的棕色狐狸跳过,懒惰的猫} 到目前为止,我提出了一个非常低效的尝试,它迭代数组并将元素和空格连接到一个新的字符串数组。它还将在新数组中保留空值,因为我每次递增I+3 字符串行=; 而line=br.readLine!=空的

我被一个可能很简单的想法难住了。我正在使用BufferedReader读取文本文件,并在空白处拆分字符串。我需要创建一个新的字符串数组,并将前一个数组中的新元素按3字分组,例如{the,quick,brown,fox,jumped,over,the,lazy,cat}⇒ {敏捷的棕色狐狸跳过,懒惰的猫}

到目前为止,我提出了一个非常低效的尝试,它迭代数组并将元素和空格连接到一个新的字符串数组。它还将在新数组中保留空值,因为我每次递增I+3

字符串行=; 而line=br.readLine!=空的{ 字符串字[]=line.split; 字符串[]结果=新字符串[words.length-1]; 对于int i=0;i
a Goose who null null was taking a null null walk by the null null side of the null null "Good heavens!" cried null null the Goose.
你的朋友是:

演示:

工作原理 Arrays.copyOfRange将arr从索引i复制到索引Integer.minarr.length,i+SIZE-1,其中Integer.minarr.length,i+SIZE返回arr.length和i+SIZE的最小值。对于i+大小可能超过arr.length导致IndexOutOfBoundsException的最后一个副本,这是必需的。以下是arr中10个元件的图示,尺寸=3:

当i=0时,Arrays.copyofRangerarr,0,Integer.min10,0+3=>Arrays.copyofRangerarr,0,3将从索引0返回arr之外的子数组到索引2

当i=3时,Arrays.copyofRangerarr,3,Integer.min10,3+3=>Arrays.copyofRangerarr,3,6将arr的子数组从索引3返回到索引5

当i=6时,Arrays.copyofRangerarr,6,Integer.min10,6+3=>Arrays.copyofRangerarr,6,9将arr的子数组从索引6返回到索引8

当i=9时,Arrays.copyofRangerarr,9,Integer.min10,9+3=>Arrays.copyofRangerarr,9,10将arr中的子数组从索引9返回到索引9


您可以使用以下方法:

公共字符串[]splitArrayString[]数组,int splitByNumOfItems{ String[]newArr=新字符串[array.length/splitByNumOfItems]; StringBuilder str=新的StringBuilder; int-newArrPos=0; 对于int i=0;i 前面的字符串[]={ 这个,快,棕色, 狐狸,跳过去, 懒惰的猫; System.out.PRINTLNARAYS.toStringsplitArraybefore,3; 印刷品:

[Thequickbrown, foxjumpedover, thelazycat]
解释

我们可以创建一个名为newArr的新数组,它将容纳名为array的原始数组的项

我们可以循环数组的项,每次它循环时,我们检查当前位置是否可以被splitByNumOfItems整除。如果是,我们可以将其设置到newArrPos确定的newArr中的相应位置。

测试此代码:

字符串行=; 而line=br.readLine!=空的{ 字符串字[]=line.split; 字符串[]结果=新字符串[words.length-1/3+words.length-1%3>0?1:0]; int j=0; 对于int i=0;ij+1?+单词[j+1]:+单词.length>j+2?+单词[j+2]:; j+=3; } 对于int i=0;i 字符串[]arr={ 这个,快,棕色, 狐狸,跳过去, 懒惰的猫; 字符串[]arr2=IntStream //每三个元素0、3、6 .iterate0,i->ii+3 //在具有 //从当前元素到下一个元素的范围 //第三个元素,或数组的结尾 .mapToObji->Arrays.streamarr,i,Math.mini+3,arr.length //用空格分隔符连接元素 .加入 //返回一个数组 .toArrayString[]::新的; //逐行输出 Arrays.streamarr2.forEachSystem.out::println; //快速棕色 //狐狸跳了过去 //懒猫
你好,Arvind,感谢您的回复您提供的解决方案非常有效。我在某种程度上理解了逻辑,但由于我是编程新手,我非常希望能对Arrays.copyOfRange方法逻辑作进一步的澄清。我知道它正在返回arr副本并将其分配给t
结果数组基于最小和最终索引范围。但是我对max index-Integer.minarr.length,I+SIZEYou有点困惑,尤其是最受欢迎的。我为你添加了一个插图。如有任何疑问,请随时发表评论。谢谢您的示例,非常感谢。它确实有助于澄清逻辑,防止越界,并使用附加变量。不客气。这不一定是最好的方法,但我认为您需要继续使用这种方法,只是为了学习,正如您所说,您是JAVA新手,或者有一种更短的方法。同意!效率会随着时间的推移而提高,但我现在很高兴能够了解这类问题的逻辑。
[The quick brown, fox jumped over, the lazy cat, Hello]
[Thequickbrown, foxjumpedover, thelazycat]