将字符串拆分为重复字符

2022-09-01 23:00:45

我想将字符串“aaaabbbccccaaddddcfghhhhhh”拆分为“aaaa”,“bbb”,“cccc”。“aa”,“dddd”,“c”,“f”等。

我试过这个:

String[] arr = "aaaabbbccccaaddddcfggghhhh".split("(.)(?!\\1)");

但这会吃掉一个字符,所以在上面的正则表达式中,我得到“aaa”,而我希望它是“aaaa”作为第一个字符串。

如何实现此目的?


答案 1

试试这个:

String   str = "aaaabbbccccaaddddcfggghhhh";
String[] out = str.split("(?<=(.))(?!\\1)");

System.out.println(Arrays.toString(out));
=> [aaaa, bbb, cccc, aa, dddd, c, f, ggg, hhhh]

解释:我们想在相同字符的组中拆分字符串,因此我们需要找出每个组之间的“边界”。我使用Java的语法进行正面回看来选择前一个字符,然后使用带有反向引用的负向前看,以验证下一个字符是否与前一个字符不同。实际上没有使用任何字符,因为只使用了两个环顾断言(即,常规表达式为零宽度)。


答案 2

在外观中捕获怎么样?

(?<=(.))(?!\1|$)

作为 Java 字符串:

(?<=(.))(?!\\1|$)