String.replaceAll без RegEx

116

Я хотел бы заменить все экземпляры подстроки в строке, но String.replaceAll()принимает только шаблон. Строка, полученная мной из предыдущего совпадения. Можно ли добавить escape-последовательности в шаблон, который у меня есть, или есть версия replaceAll()в другом классе, которая принимает буквальную строку вместо шаблона?

дромодель
источник
возможный дубликат обратной косой черты с String.replaceAll
МакДауэлл

Ответы:

189

Просто используйте, String.replace(CharSequence,CharSequence)а не replaceAll.

Джон Скит
источник
13
Это не просто заменяет первое? Как ни странно, они назвали это «replaceAll» вместо «replaceRegex».
Magic Octopus Urn
6
System.out.println("hello world, hello life, hello you".replace("hello","hi"));возвращается "hi world, hi life, hi you".
Тьяго Мата
14
@MagicOctopusUrn: Да, я согласен, это было очень плохое именование - со временем это вызвало много путаницы.
Джон Скит
очень плохое название методов. Почему они (солнце / оракул) усложняют простые вещи
Stunner
94

Метод добавления побегов является Pattern.quote().

String replaced = myString.replaceAll(Pattern.quote(matchingStr), replacementStr)

Но, как говорит Джон, вы можете просто использовать replace(). Несмотря на то, что он отличается от replaceAllназвания, он заменяет все вхождения точно так же replaceAll().

Марк Питерс
источник
Отлично работает, например, если у вас есть "$" в matchStr.
Жюльен Лафон,
скорее Pattern.compile (); Pattern.quote () приносит нежелательные результаты
Павел Зварыч
@PavloZvarych: Pattern.compile()компилирует строку как регулярное выражение, то есть специальные символы будут иметь особое значение. Это полная противоположность тому Pattern.quote(), что делает, и то, о чем просил OP ( quote()говорит: «обрабатывать строку как литерал»). Может быть, вы могли бы подробнее рассказать о «нежелательных результатах», о которых вы говорите.
Марк Петерс
@MarkPeters это было что-то вроде \\ G1 \\ G за «1 доллар»
Павел Зварыч
1
@PavloZvarych: Если вы пытаетесь процитировать замену (а не шаблон поиска), вы хотите использовать Matcher.quoteReplacement("$aa +"). Pattern.compile()производит a Pattern, а не a String, поэтому мне непонятно, как вы вообще его используете replaceAll.
Марк Петерс