我有一个看起来像这样的字符串:
0,0,1,2,4,5,3,4,6
我想要返回的是String[]
在每 3 个逗号之后拆分的一个,因此结果如下所示:
[ "0,0,1", "2,4,5", "3,4,6" ]
我发现了类似的功能,但它们不会以第 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
您的示例中)或以前匹配的逗号,如2,4,5
and 3,4,6
。此外,如果您想使用其他字符,那么您也可以使用其他字符集,例如
\\w
这将匹配字母字符、数字和_
\\S
所有不是空白的东西[^,]
所有不是逗号的东西顺便说一句,这种形式适用于每隔 3 个、5 个、7 个(和其他奇数)逗号split("(?<=\\G\\w+,\\w+,\\w+,\\w+,\\w+),")
拆分一次,就像每隔 5 个逗号拆分一次一样。
要在每个第 2、第 4、第 6、第 8(和其余偶数)逗号上拆分,当数字最多可以有 3 位数字(0、00、12、000、123 +
、412、999)。{1,maxLengthOfNumber}
split("(?<=\\G\\w{1,3},\\w{1,3},\\w{1,3},\\w{1,3}),")
要拆分每个第二个逗号,您还可以split("(?<!\\G\\d+),")
根据我之前的回答使用这个正则表达式
强制性番石榴答案:
String input = "0,0,1,2,4,5,3,4,6";
String delimiter = ",";
int partitionSize = 3;
for (Iterable<String> 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<String> strList = new ArrayList<String>();
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 风格答案:
如果我们将逗号之间的位称为“部分”,并将结果从“子字符串”中分离出来,那么:
n
是到目前为止找到的部分数量,
i
是下一部分
startIndex
的开始,是当前子字符串的开始
迭代这些部分,每三个部分:砍掉一个子字符串。
当逗号用完时,将剩余的部分添加到结果中。
List<String> result = new ArrayList<String>();
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));