java - 将字符串拆分为重复的字符

标签 java regex string split

我想将字符串“aaaabbbccccaaddddcfggghhhh”拆分为“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 的语法进行正向回溯来选择前一个字符,然后使用反向引用进行负向预读,以验证下一个字符与前一个字符不同。实际上没有消耗任何字符,因为只使用了两个环视断言(即,正则表达式是零宽度)。

关于java - 将字符串拆分为重复的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523597/

相关文章:

python - 在 Python 中解析 Word 文档

java - 无法预实例化名为 org.sakaiproject.accountvalidator.dao.impl.ValidationLogicDaoTarget 的单例

python - 正则表达式替换 Python 中奇数重复出现的字符

java - 仅当子字符串不存在时才匹配字符串的正则表达式

javascript - 正则表达式仅获取特定字符,之前/之后没有任何内容

javascript - 正则表达式,从字符串中选择第一个数字

java - Mapstruct 生成的类使用父级而不是子级的 Lombok 构建器

java - 重新安装 Maven 依赖项项目会导致已运行的应用程序出现 NoClassDefFoundError

java - 通过 JMS 发送的 XML 消息 (JAXB) 为空

c++ - .h 文件中的字符串预定义并使用它来过滤用户输入