对于给定的单词,我想要搜索彼此相邻的所有子串至少3次,并将所有子串替换为仅一个。当子串只有一个字符时,我知道如何做到这一点。例如,下面的代码为输入字符串“Bahhhhhhh”返回“Bah”:
String term = "Bahhhhhhh";
term = term.replaceAll("(.)\\1{2,}", "$1");
但是,我需要一个更通用的模式,将“Bahahahaha”转换为“Baha”。
答案 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个字符的原因。