Как удалить 3 или более последовательных букв в Java в 2 последовательных буквы?
Я пытаюсь обработать строки с повторяющимися символами, чтобы найти правильное слово в словаре.
Подход, который я должен использовать, состоит в том, чтобы найти слова с 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*");
2 ответа
Вы можете использовать это регулярное выражение ("чистая версия"):
(\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
под заменой подразумевается содержание соответствующей группы захвата.
Вы также можете сделать это так:
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