如何将java中的3个或以上连续字母去掉为2个连续字母?

How to remove 3 or more consecutive letters in java into 2 consecutive letters?

我正在尝试处理包含重复字符的字符串,以便在字典中找到正确的单词。

我必须使用的方法是找到具有 3 个或更多连续字母的单词并将它们删除为 2 个连续字母。

那我查字典有没有这个词。如果这个词不存在,那么我必须把连续的两个字母去掉,变成只有一个字母。

示例:

gooooooood -> good (this existis)
awesooooome -> awesoome (this doesn't exist) -> awesome (this exists)
aaawwwesooooooommmme -> aawwesoomme (this doesn't exist) -> awesome (this exists)

我正在使用 JAVA 并且我已经在使用这个正则表达式来获取字符串中包含 3 个或更多重复字母的单词:

Pattern p = Pattern.compile("\b\w*(\w)\1{2}\w*");

您可以使用这个正则表达式 ("pure version"):

(\b\w*?)(\w){2,}(\w*)

字符串版本:

"(\b\w*?)(\w)\2{2,}(\w*)"

你应该使用replaceAll(regex, "")

说明

(\b\w*?) // capture group 1 is lazy
(\w)     // capture group 2 captures the first occurrence of the char
{2,}   // char may occur 2 or more times...
(\w*)    // capture group 3

注意替换中的$number指的是对应捕获组的内容

你也可以这样做:

Pattern pattern = Pattern.compile("(\w)\1{2,}");
System.out.println(pattern.matcher("gooooooood").replaceAll(""));
System.out.println(pattern.matcher("awesooooome").replaceAll(""));
System.out.println(pattern.matcher("aaawwwesooooooommmme").replaceAll(""));

输出:

good
awesoome
aawwesoomme

对于第二步,您可以按照以下步骤操作:

Pattern pattern2 = Pattern.compile("(\w)\1");
System.out.println(pattern2.matcher("awesoome").replaceAll(""));
System.out.println(pattern2.matcher("aawwesoomme").replaceAll(""));

输出:

awesome
awesome