将字符串拆分为重复字符

Lok*_*esh 21 java regex string split

我想把字符串"aaaabbbcccaaddddcfggghhhh"分成"aaaa","bbb","cccc"."aa","dddd","c","f"等.

我试过这个:

String[] arr = "aaaabbbccccaaddddcfggghhhh".split("(.)(?!\\1)");
Run Code Online (Sandbox Code Playgroud)

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

我该如何实现这一目标?

Ósc*_*pez 26

试试这个:

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

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

说明:我们希望将字符串拆分为相同字符的组,因此我们需要找出每个组之间的"边界".我正在使用Java的语法进行正面后视来选择前一个char,然后使用后向引用进行负前瞻,以验证下一个char与前一个char不同.实际上没有消耗任何字符,因为只使用了两个环视断言(即,常规表达式为零宽度).


Jon*_*y 5 5

在一个外观捕捉怎么样?

(?<=(.))(?!\1|$)
Run Code Online (Sandbox Code Playgroud)

作为Java字符串:

(?<=(.))(?!\\1|$)
Run Code Online (Sandbox Code Playgroud)

  • @Reimeus:因为我复制并粘贴它而不进行转义.我真的**希望Java有正则表达式文字.:-) (2认同)