将字符串拆分为重复字符
我想把字符串“aaaabbbcccaaddddcfggghhhh”分成“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的语法进行正面后视来选择前一个char,然后使用后向引用进行负前瞻,以validation下一个char与前一个char不同。 实际上没有消耗任何字符,因为只使用了两个环视断言(即,常规表达式为零宽度)。
如何捕捉到后视镜?
(?<=(.))(?!\1|$)
作为Java字符串:
(?<=(.))(?!\\1|$)
在这里我接受每个字符并在if循环中检查两个条件,即字符串不能超过长度,如果下一个字符不等于第一个字符,则继续for循环,否则接受新行并打印它。
for (int i = 0; i < arr.length; i++) { char chr= arr[i]; System.out.print(chr); if (i + 1 < arr.length && arr[i + 1] != chr) { System.out.print(" \n"); } }