您可以尝试将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 表示最后一个匹配,或者如果没有(在第一次使用的情况下)字符串的开头
-
(?<=...), 是 positive look-behind 将匹配逗号 , 之前在 (?<=...) 中描述的一些字符串
-
(?<=\\G\\d+,\\d+,\\d+), 所以将尝试查找前面有三个数字的逗号,并且这些数字前面有字符串的以太网开头(如您的示例中的 ^0,0,1)或以前匹配的逗号,如 2,4,5 和 3,4,6。
如果您想使用其他字符然后是数字,您也可以使用其他字符集,例如
顺便说一句,这种形式适用于每隔 3 个、5 个、7 个(和其他奇数)逗号拆分一次,例如 split("(?<=\\G\\w+,\\w+,\\w+,\\w+,\\w+),") 将每隔 5 个逗号拆分一次。
要在第 2、4、6、8 个(以及其余的偶数)逗号上拆分,您需要将 + 替换为 {1,maxLengthOfNumber},如 split("(?<=\\G\\w{1,3},\\w{1,3},\\w{1,3},\\w{1,3}),") 以在数字最多为 3 时每第 4 个逗号拆分数字(0、00、12、000、123、412、999)。
要拆分每个第二个逗号,您还可以根据我的 previous answer 使用此正则表达式 split("(?<!\\G\\d+),")