在每个第i个和第j个字符处拆分

我需要在每个第 i 个和第 j 个字符处拆分一个字符串,其中 i 和 j 可以根据输入参数进行更改。例如,如果我有一个输入

String s = "1234567890abcdef";
int i = 2;
int j = 3;

我希望我的输出是一个数组:

[12, 345, 67, 890, ab, cde, f]

我找到了一个紧凑的正则表达式,可以在每个第 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]

如何修改上面的正则表达式以交替拆分每个第 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]

  • Yes, in that case remember to replace `i <= 2` with `i <= 3` (or use `m.groupCount()`).

以上是在每个第i个和第j个字符处拆分的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>