如何将java中的3个或更多连续字母删除为2个连续字母?

时间:2016-05-07 13:36:35

标签: java regex replace repeat letters

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

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

然后我会在字典中查找这个单词是否存在。如果单词不存在,那么我必须将两个连续的字母删除为1个字母。

示例:

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*");

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式(“纯版本”):

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

字符串版本:

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

您应该使用replaceAll(regex, "$1$2$2$3")

解释

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

请注意,替换中的$number是指相应捕获组的内容。

答案 1 :(得分:1)

你也可以这样做:

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

<强>输出:

good
awesoome
aawwesoomme

第二步,你可以这样做:

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

<强>输出:

awesome
awesome