2010-07-28 2 views
1

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

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

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

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

Вместо этого я получаю: @cm:name:"hello". Исходный контент.

ответ

1

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

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

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

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

+0

Я упростил это, я использую выражение регулярных выражений. – blackberryfan234

+1

хорошо, вы зашли слишком далеко в своем упрощении, создав некомпилирующий код, который не иллюстрирует вашу проблему. Пожалуйста, уточните вопрос с соответствующими сведениями, то есть фактическим кодом. – Bozho

+0

жаль, что я не понимал, что мне нужно бежать от него в этом редакторе. – blackberryfan234

0

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

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

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

  1. Компилятор Java требует, чтобы две черной абстракции отображали одиночную обратную косую черту в строковом литерале.

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

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