将字符串拆分为重复字符

时间:2014-05-07 16:44:12

标签: java regex string split

我想把字符串“aaaabbbccccaaddddcfggghhhh”分成“aaaa”,“bbb”,“cccc”。 “aa”,“dddd”,“c”,“f”等。

我试过了:

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

但这会占用一个角色,所以使用上面的正则表达式,我得到“aaa”,而我希望它是“aaaa”作为第一个字符串。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:24)

试试这个:

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,然后使用后向引用进行负前瞻,以验证下一个char与前一个char不同。实际上没有消耗任何字符,因为只使用了两个环视断言(即,常规表达式为零宽度)。

答案 1 :(得分:5)

如何在后视镜中捕捉?

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

作为Java字符串:

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

答案 2 :(得分: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");
    }
}