在Java中每隔三个逗号分割一个String

我有一个看起来像这样的字符串:

0,0,1,2,4,5,3,4,6 

我想要返回的是一个String[] ,它在每三个逗号之后被拆分,所以结果如下所示:

 [ "0,0,1", "2,4,5", "3,4,6" ] 

我找到了类似的function,但它们没有分成第n个逗号。

您可以尝试使用split方法(?<=\\G\\d+,\\d+,\\d+),正则表达式

演示

 String data = "0,0,1,2,4,5,3,4,6"; String[] array = data.split("(?<=\\G\\d+,\\d+,\\d+),"); //Magic :) // to reveal magic see explanation below answer for(String s : array){ System.out.println(s); } 

输出:

 0,0,1 2,4,5 3,4,6 

说明

  • \\d表示一位数字,与[0-9]相同,如03
  • \\d+表示一个或多个数字,如123
  • \\d+,表示后面带逗号的一个或多个数字,如1,234,
  • \\d+,\\d+,\\d+将接受三个带逗号的数字,如12,3,456
  • \\G表示最后一次匹配,或者如果没有(在第一次使用的情况下)字符串的开头
  • (?<=...),是正面的后视 ,它将匹配逗号,在它之前还有一些字符串描述(?<=...)
  • (?<=\\G\\d+,\\d+,\\d+),因此会尝试查找前面有三个数字的逗号,并且这些数字之前的字符串有以太开始(如^0,0,1在你的例子中为^0,0,1 )或先前匹配的逗号,如2,4,53,4,6

如果你想使用其他字符然后数字,你也可以使用其他字符集

  • \\w将匹配字母字符,数字和_
  • 一切都不是白色空间
  • [^,]一切都不是逗号
  • ... 等等。 模式文档中的更多信息

顺便说一下,这个表单将在每三,五,七,(和其他奇数)逗号上进行split("(?<=\\G\\w+,\\w+,\\w+,\\w+,\\w+),") ,如split("(?<=\\G\\w+,\\w+,\\w+,\\w+,\\w+),")将在每个第5个逗号分开。

要分隔每个第2,第4,第6,第8(以及偶数数字的其余部分)逗号,您需要将{1,maxLengthOfNumber}替换为{1,maxLengthOfNumber}例如split("(?<=\\G\\w{1,3},\\w{1,3},\\w{1,3},\\w{1,3}),")在每个第4个逗号分割时,数字最多可以包含3位数(0,00,12) ,000,123,412,999)。

要分割每个第二个逗号,您还可以根据我以前的答案使用此正则表达式split("(?

强制番石榴答案:

 String input = "0,0,1,2,4,5,3,4,6"; String delimiter = ","; int partitionSize = 3; for (Iterable iterable : Iterables.partition(Splitter.on(delimiter).split(s), partitionSize)) { System.out.println(Joiner.on(delimiter).join(iterable)); } 

输出:

 0,0,1 2,4,5 3,4,6 

尝试类似下面的内容:

 public String[] mySplitIntoThree(String str) { String[] parts = str.split(","); List strList = new ArrayList(); for(int x = 0; x < parts.length - 2; x = x+3) { String tmpStr = parts[x] + "," + parts[x+1] + "," + parts[x+2]; strList.add(tmpStr); } return strList.toArray(new String[strList.size()]); } 

(您可能需要导入java.util.ArrayList和java.util.List)

很好的编码道场! 这是我老式的C风格答案:

如果我们调用逗号’parts’之间的位,并将结果从’substrings’中分离出来,那么:

n是到目前为止找到的零件数量, i是下一个零件的开始, startIndex是当前子串的开始

迭代零件,每三个部分:切掉一个子串。

当用完逗号时,将结尾的剩余部分添加到结果中。

 List result = new ArrayList(); int startIndex = 0; int n = 0; for (int i = x.indexOf(',') + 1; i > 0; i = x.indexOf(',', i) + 1, n++) { if (n % 3 == 2) { result.add(x.substring(startIndex, i - 1)); startIndex = i; } } result.add(x.substring(startIndex));