4

对于给定的单词,我想搜索所有相邻出现至少 3 次的子字符串,并将它们全部替换为一个。当子字符串只有一个字符时,我知道该怎么做。例如,下面的代码为输入字符串“Bahhhhhhh”返回“Bah”:

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

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

4

2 回答 2

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

输出:

Bah 
Baha
于 2012-06-07T15:29:42.370 回答
2

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

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

您需要小心避免巨大的回溯性能损失。这就是为什么我将其限制为 1-3 个字符。

于 2012-06-07T15:27:40.717 回答