Удалить двойную букву из строки, используя Java - PullRequest
5 голосов
/ 18 января 2011

Мне нужно удалить двойную букву из строки, используя операции регулярных выражений в Java.Например: ПРИНЦЕ -> ПРИНЦ ЯБЛОКО -> ЯБЛОКО

Ответы [ 4 ]

13 голосов
/ 18 января 2011

Простое решение (удаление повторяющихся символов)

Как это:

final String str = "APPLEE";
String replaced = str.replaceAll("(.)\\1", "$1");
System.out.println(replaced);

Выход:

APLE

Не только какие-либо символы, только буквы

Как правильно комментирует @Jim, приведенное выше соответствует любому двойному символу, а не только букве. Вот несколько вариантов, которые соответствуют буквам:

// the basics, ASCII letters. these two are equivalent:
str.replaceAll("([A-Za-z])\\1", "$1");
str.replaceAll("(\\p{Alpha})\\1", "$1");

// Unicode Letters
str.replaceAll("(\\p{L})\\1", "$1");

// anything where Character.isLetter(ch) returns true
str.replaceAll("(\\p{javaLetter})\\1", "$1");

Ссылки:

Для дополнительной справки:

  1. Character.isLetter(ch) (javadocs)
  2. любой метод в Character из форма Character.isXyz(char) включает шаблон с именем \p{javaXyz} (обратите внимание на капитализация). Этот механизм описано в шаблоне Javadocs
  3. Unicode блоки и категории могут также быть сопоставлены с \p и \P конструирует как в Perl. \p{prop} соответствует, если вход имеет свойство prop, тогда как \P{prop} не совпадают, если на входе есть имущество. Этот механизм также описано в шаблоне Javadocs
6 голосов
/ 18 января 2011
String s = "...";
String replaced = s.replaceAll( "([A-Z])\\1", "$1" );
3 голосов
/ 18 января 2011

Если вы хотите заменить только дубликат («AA» -> «A», «AAA» -> «AA»), используйте

public String undup(String str) {
  return str.replaceAll("(\\w)\\1", "$1");
}

Для замены трех экземпляров и т. Д. Используйте: str.replaceAll("(\\w)\\1+", "$1");

Для замены только одной пары используется длинная строка (AAAA-> AAA, AAA-> AA): str.replaceAll("(\\w)(\\1+)", "$2");

1 голос
/ 18 января 2011

Это можно сделать, просто перебирая строку, а не прибегая к регулярным выражениям.

StringBuilder ret=new StringBuilder(text.length());

if (text.length()==0) return "";
ret.append(text.charAt(0));
for(int i=1;i<text.length();i++){
  if (text.charAt(i)!=text.charAt(i-1))
    ret.append(text.charAt(i));
}

return ret.toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...