用一个副本替换一系列子串

时间:2012-06-07 15:23:09

标签: java regex

对于给定的单词,我想要搜索彼此相邻的所有子串至少3次,并将所有子串替换为仅一个。当子串只有一个字符时,我知道如何做到这一点。例如,下面的代码为输入字符串“Bahhhhhhh”返回“Bah”:

String term = "Bahhhhhhh";
term = term.replaceAll("(.)\\1{2,}", "$1");

但是,我需要一个更通用的模式,将“Bahahahaha”转换为“Baha”。

2 个答案:

答案 0 :(得分:6)

    String[] terms = { "Bahhhhhhh", "Bahahahaha" };
    for (String term : terms) {
        System.out.println(term.replaceAll("(.+?)\\1{2,}", "$1"));
    }

输出:

Bah 
Baha

答案 1 :(得分:2)

这适用于重复1,2或3个字符的长度。

String term = "Bahhhhhhh";
term = term.replaceAll("(.{1,3})\\1{2,}", "$1");

您需要小心避免巨大的回溯性能点击。这就是我将它限制在1-3个字符的原因。