Они не строго необходимы в способе, которым ремни безопасности не строго необходимы. Но они могут действительно сохранить Вас от выполнения чего-то глупого, которое портит Вашу базу данных.
настолько более хорошо отладить ограничительную ошибку FK, чем должны восстановить удаление, которое повредило Ваше приложение.
String # replaceAll ()
интерпретирует аргумент как регулярное выражение . \
- это escape-символ в как String
, так и regex
. Вам нужно дважды экранировать его для регулярного выражения:
string.replaceAll("\\\\", "\\\\\\\\");
Но вам не обязательно использовать регулярное выражение для этого просто потому, что вам нужна точная посимвольная замена, и вам не нужны здесь шаблоны. Итак, String # replace ()
должно хватить:
string.replace("\\", "\\\\");
Update : согласно комментариям, вы, похоже, хотите использовать строку в контексте JavaScript. Возможно, вам лучше использовать StringEscapeUtils # escapeEcmaScript ()
вместо этого, чтобы охватить больше символов.
Чтобы избежать подобных проблем, вы можете использовать replace
(который принимает простую строку) вместо replaceAll
(который принимает регулярное выражение) . Вам все равно придется избегать обратных косых черт, но не так, как это требуется для регулярных выражений.
Вам нужно будет экранировать (экранированную) обратную косую черту в первом аргументе, поскольку это регулярное выражение. Замена (2-й аргумент - см. Matcher # replaceAll (String) ) также имеет особое значение обратных косых черт, поэтому вам придется заменить их на:
theString.replaceAll("\\\\", "\\\\\\\\");
Да ... к тому времени, когда компилятор регулярных выражений увидит заданный вами шаблон он видит только одну обратную косую черту (поскольку лексер Java превратил двойной обратный удар в одинарный). Вам нужно заменить "\\\\"
на "\\\\"
, хотите верьте, хотите нет! Java действительно нужен хороший синтаксис необработанных строк.