拆分正则表达式以提取连续字符的字符串

时间:2012-11-28 01:46:42

标签: java regex split

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

以下是测试用例:

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

预期产出:

[aaa, bb, c, dd, eee]

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


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

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

1 个答案:

答案 0 :(得分:26)

完全有可能在一步中编写用于拆分的正则表达式:

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

由于您想要在每组相同的字符之间进行拆分,我们只需要查找两组之间的边界。我通过使用正面的后视来获取前一个字符,并使用负前瞻和后引用来检查下一个字符是不是同一个字符。

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