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