将字符串拆分为重复字符
我想将字符串“aaaabbbccccaaddddcfghhhhhh”拆分为“aaaa”,“bbb”,“cccc”。“aa”,“dddd”,“c”,“f”等。
我试过这个:
String[] arr = "aaaabbbccccaaddddcfggghhhh".split("(.)(?!\\1)");
但这会吃掉一个字符,所以在上面的正则表达式中,我得到“aaa”,而我希望它是“aaaa”作为第一个字符串。
如何实现此目的?
我想将字符串“aaaabbbccccaaddddcfghhhhhh”拆分为“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的语法进行正面回看来选择前一个字符,然后使用带有反向引用的负向前看,以验证下一个字符是否与前一个字符不同。实际上没有使用任何字符,因为只使用了两个环顾断言(即,常规表达式为零宽度)。
在外观中捕获怎么样?
(?<=(.))(?!\1|$)
作为 Java 字符串:
(?<=(.))(?!\\1|$)