我需要在每个第 i 个和第 j 个字符处拆分一个字符串,其中 i 和 j 可以根据输入参数进行更改。例如,如果我有一个输入
String s = "1234567890abcdef";
int i = 2;
int j = 3;
Run Code Online (Sandbox Code Playgroud)
我希望我的输出是一个数组:
[12, 345, 67, 890, ab, cde, f]
Run Code Online (Sandbox Code Playgroud)
我找到了一个紧凑的正则表达式,可以在每个第 n 个字符处进行拆分。n = 3 的示例使用"(?<=\\G...)"或"(?<=\\G.{3})"
String s = "1234567890abcdef";
int n = 3;
System.out.println(Arrays.toString(s.split("(?<=\\G.{"+n+"})")));
//output: [123, 456, 789, 0ab, cde, f]
Run Code Online (Sandbox Code Playgroud)
如何修改上面的正则表达式以交替拆分每个第 2 个和第 3 个字符?
天真的链接像"(?<=\\G.{2})(?<=\\G.{3})"不起作用。
我不认为你可以用 来做到这一点split(),因为每个匹配都应该知道之前匹配的模式。
如果您不想手动迭代字符串的字符,则可以使用以下内容:
Matcher m = Pattern.compile("(.{0,2})(.{0,3})").matcher("1234567890abcdef");
List<String> list = new ArrayList<>();
while (m.find()) {
for (int i = 1; i <= 2; i++) {
if (!m.group(i).isEmpty()) {
list.add(m.group(i));
}
}
}
System.out.println(list); // prints [12, 345, 67, 890, ab, cde, f]
Run Code Online (Sandbox Code Playgroud)