replaceAll - не удаляется подстрока

235
31 августа 2017, 18:08

Нужно из строки "Привет, как дела? (site.ru)" удалить подстроку (site.ru).

Делаю так, но скобки остаются:

String strRep = "(site.ru)";
str = str.replaceAll(strRep, "");

Как удалить подстроку со скобками?

Answer 1

Используйте replace вместо replaceAll:

String strRep = "(site.ru)";
str = str.replace(strRep, "");

Метод replace принимает в качестве аргумента простую строку (replaceAll регулярное выражение). Таким образом отпадает необходимость экранировать скобки.

Answer 2

Метод replaceAll() первым параметром принимает регулярное выражение

   @param   regex
 *          the regular expression to which this string is to be matched
 * @param   replacement
 *          the string to be substituted for each match

Скобки являются метасимволом в регулярных выражениях и должны быть экранированы.

String strRep = "\\(site.ru\\)";
str = str.replaceAll(strRep, "");
Answer 3

Метод replaceAll(...) имеет следующую сигнатуру:

public String replaceAll(String regex, String replacement)

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

Круглые скобки в регулярных выражениях имеют определенный смысл (группировка). Для того, чтобы скобки воспринимались как часть текста, их необходимо экранировать. Соответственно, рабочий вариант будет выглядеть так:

String str = "Привет, как дела? (site.ru)";
String strRep = "\\(site.ru\\)";
str = str.replaceAll(strRep, "");

Если Вам требуется просто заменить одну строку на другую (без использования регулярных выражений), то целесообразно использовать метод replace(...):

public String replace(CharSequence target, CharSequence replacement)

Тогда код будет выглядеть так:

String str = "Привет, как дела? (site.ru)";
String strRep = "(site.ru)";
str = str.replace(strRep, "");
READ ALSO
Intent во Fragment

Intent во Fragment

День добрыйПытаюсь открыть активити из фрагмента

256
Ошибка при Destroy`е Activity с Фрагментами

Ошибка при Destroy`е Activity с Фрагментами

Очень редкий баг, но его надо поправить(Пришел по багтрекеру после месяца использования пользователями)

242
Как написать правила для proguard?

Как написать правила для proguard?

Мне нужно было сделать имплементация proguard в проекте как было до

368
Не скрывается блок в bootstrap (hidden-md hidden-lg)

Не скрывается блок в bootstrap (hidden-md hidden-lg)

Есть блок с 4 элементами в сетке bootstrap которые отличаются по содержанию, а значит и по высотеФидл

354