23

是否有一个正则表达式可以将String.split()字符串分解为连续的字符 - 即拆分下一个字符与前一个字符不同的位置?

这是测试用例:

String regex = "your answer here";
String[] parts = "aaabbcddeee".split(regex);
System.out.println(Arrays.toString(parts));

预期输出:

[aaa, bb, c, dd, eee]

尽管测试用例只有字母作为输入,但这只是为了清楚起见;输入字符可以是任何字符。


请不要提供涉及循环或其他技术的“解决方法”。

问题是为如上所示的代码找到正确的正则表达式 - 即只使用split()而不调用其他方法。这不是寻找能够“完成工作”的代码的问题。

4

1 回答 1

31

完全可以编写正则表达式以一步进行拆分:

"(?<=(.))(?!\\1)"

由于您想在每组相同的字符之间进行拆分,因此我们只需要寻找 2 组之间的边界。我通过使用积极的后视来获取前一个字符来实现这一点,并使用消极的前瞻和后向引用来检查下一个字符是否不是同一个字符。

如您所见,正则表达式是零宽度的(只有 2 个环顾断言)。正则表达式不消耗任何字符。

于 2012-11-28T02:17:20.147 回答