Экранирование '\' для использования с методом Java replaceAll - PullRequest
1 голос
/ 28 июля 2010

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

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

Если я скажу query.replaceAll(":", "\\:");

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

Вместо этого я получаю: @cm:name:"hello". Оригинальный контент.

Ответы [ 4 ]

1 голос
/ 29 июля 2010

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

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

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

Итак, если вы хотите, чтобы строковый литерал содержал одинарную обратную косую черту регулярного выражения, вы должны написать four .

1 голос
/ 28 июля 2010

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

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

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

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

0 голосов
/ 28 июля 2010

избежать слеш

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

0 голосов
/ 28 июля 2010

Последовательность выхода для \ равна \\. Итак, вы написали бы это:

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