String.replaceAll единственные обратные косые черты с двойными обратными косыми чертами

Они не строго необходимы в способе, которым ремни безопасности не строго необходимы. Но они могут действительно сохранить Вас от выполнения чего-то глупого, которое портит Вашу базу данных.

настолько более хорошо отладить ограничительную ошибку FK, чем должны восстановить удаление, которое повредило Ваше приложение.

113
задан BalusC 13 August 2015 в 08:09
поделиться

4 ответа

String # replaceAll () интерпретирует аргумент как регулярное выражение . \ - это escape-символ в как String , так и regex . Вам нужно дважды экранировать его для регулярного выражения:

string.replaceAll("\\\\", "\\\\\\\\");

Но вам не обязательно использовать регулярное выражение для этого просто потому, что вам нужна точная посимвольная замена, и вам не нужны здесь шаблоны. Итак, String # replace () должно хватить:

string.replace("\\", "\\\\");

Update : согласно комментариям, вы, похоже, хотите использовать строку в контексте JavaScript. Возможно, вам лучше использовать StringEscapeUtils # escapeEcmaScript () вместо этого, чтобы охватить больше символов.

191
ответ дан 24 November 2019 в 02:42
поделиться

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

14
ответ дан 24 November 2019 в 02:42
поделиться

Вам нужно будет экранировать (экранированную) обратную косую черту в первом аргументе, поскольку это регулярное выражение. Замена (2-й аргумент - см. Matcher # replaceAll (String) ) также имеет особое значение обратных косых черт, поэтому вам придется заменить их на:

theString.replaceAll("\\\\", "\\\\\\\\");
7
ответ дан 24 November 2019 в 02:42
поделиться

Да ... к тому времени, когда компилятор регулярных выражений увидит заданный вами шаблон он видит только одну обратную косую черту (поскольку лексер Java превратил двойной обратный удар в одинарный). Вам нужно заменить "\\\\" на "\\\\" , хотите верьте, хотите нет! Java действительно нужен хороший синтаксис необработанных строк.

3
ответ дан 24 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

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