我想将字符串“aaaabbbccccaaddddcfggghhhh”拆分为“aaaa”、“bbb”、“cccc”。 “aa”、“dddd”、“c”、“f”等。
我试过了:
String[] arr = "aaaabbbccccaaddddcfggghhhh".split("(.)(?!\\1)");
但这会吃掉一个字符,所以使用上面的正则表达式我得到“aaa”,而我希望它是“aaaa”作为第一个字符串。
我如何做到这一点?
最佳答案
试试这个:
String str = "aaaabbbccccaaddddcfggghhhh";
String[] out = str.split("(?<=(.))(?!\\1)");
System.out.println(Arrays.toString(out));
=> [aaaa, bbb, cccc, aa, dddd, c, f, ggg, hhhh]
解释:我们想将字符串拆分为相同字符的组,因此我们需要找出每个组之间的“边界”。我使用 Java 的语法进行正向回溯来选择前一个字符,然后使用反向引用进行负向预读,以验证下一个字符与前一个字符不同。实际上没有消耗任何字符,因为只使用了两个环视断言(即,正则表达式是零宽度)。
关于java - 将字符串拆分为重复的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523597/