Выход '\' для использования с методом Java replaceAll

Я получаю некоторые странные результаты при использовании replaceAll метода Строкового класса.

Строковый запрос содержит следующее: @cm:name:"hello"

Если я говорю query.replaceAll(":", "\\:");

Я ожидал бы следующий результат: @cm\:name\:"hello"

Вместо этого я добираюсь: @cm:name:"hello". Исходное содержание.

1
задан Paolo 1 February 2013 в 16:22
поделиться

4 ответа

Не используйте replaceAll(...) для неречевых замен. Вместо этого используйте replace(...).

Затем убедитесь, что:

query = query.replace(":", "\\:");

поскольку String неизменяем - т.е. если вы просто вызовете метод без присвоения результата, вы ничего не получите - внутреннее состояние объекта не изменится.

1
ответ дан 2 September 2019 в 22:39
поделиться

Есть два простых правила.

  1. Компилятор Java требует два блэкслеша для представления одного обратного слеша в строковом литерале.

  2. Регулярные выражения требуют два обратных слеша для представления одного обратного слеша в регулярном выражении.

Поэтому, если вы хотите, чтобы строковый литерал содержал один обратный слеш в регулярном выражении, вы должны написать четыре.

1
ответ дан 2 September 2019 в 22:39
поделиться

Исключите слэш

query.replaceAll(":","\\\:");

0
ответ дан 2 September 2019 в 22:39
поделиться

Конечная последовательность для \ - \\\. Таким образом, вы напишите так:

query.replaceAll(":", "\\:");
0
ответ дан 2 September 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: