Использование replaceAll со строками, содержащими специальные символы в Java

В принципе, это то, что я пытаюсь сделать, это:

String s = "to+go+la";

s.replaceAll("to+go", "");

который должен вернуть "+la"

Я знаю, что если бы я просто заменил знаки +, я бы использовал \\+, но я не уверен, что делать, когда знаки встроены. Лучший ответ - просто удалить их из обоих? Это будет работать для моих целей, но это похоже на ответ изоленты.


person Thumbz    schedule 19.08.2012    source источник
comment
что вы имеете в виду под встроенным? Можете ли вы привести пример?   -  person Eugene    schedule 19.08.2012
comment
например, знак плюс находится в середине to+go   -  person Thumbz    schedule 19.08.2012


Ответы (3)


В вашем случае не требуется регулярное выражение, поэтому его нецелесообразно использовать. Это и медленнее, и громоздче. Используйте простую и простую replace вместо replaceAll, и вам не нужно ничего экранировать:

String s = "to+go+la".replace("to+go", "");
person Marko Topolnik    schedule 19.08.2012

... но это похоже на ответ изолентой.

Это похоже на ответ «клейкой ленты», потому что вы не узнали, почему вам нужно использовать \+, когда вы заменяете только символ «+».

Ответ заключается в том, что "+" является метасимволом регулярного выражения. Это означает, что «символ или группа перед этим могут появиться один или несколько раз».


Если вы хотите, чтобы "to+go" рассматривалось как буквальная строка (а не как регулярное выражение), то один из способов сделать это - "цитировать регулярное выражение"; например

s.replaceAll(Pattern.quote("to+go"), "");

С другой стороны, если символы + совершенно неуместны, то их удаление тоже сработает...

person Stephen C    schedule 19.08.2012
comment
Нет, я имею в виду удаление знаков плюса из обоих, прежде чем пытаться удалить один из другого. Это работает для меня, потому что я планирую в конечном итоге убрать знаки плюс, но если бы я этого не сделал, это было бы проблемой. - person Thumbz; 19.08.2012
comment
Спасибо. Это точный ответ, который я искал. - person Thumbz; 19.08.2012

Как насчет этого:

  String input = "to+go+la";
  String result = input.replaceAll("to\\+go","");
  System.out.println(result);

Почему это плохой шаблон? Вы под встроенным подразумеваете что-то вроде этого?

 String input = "to+++go+la";

Если это так, то единственное, что изменится, это шаблон:

 String result = input.replaceAll("to(\\+)+go","");
person Eugene    schedule 19.08.2012