Pattern.quote(String s)Рода делает то , что вы хотите. Однако это оставляет желать лучшего; на самом деле он не экранирует отдельные символы, а просто оборачивает строку \Q...\E.
Не существует метода, который бы делал именно то, что вы ищете, но хорошая новость заключается в том, что на самом деле довольно просто избежать всех специальных символов в регулярном выражении Java:
regex.replaceAll("[\\W]", "\\\\$0")
Почему это работает? Что ж, документация дляPattern специально сказано, что разрешено экранировать неалфавитные символы, которые не обязательно экранировать:
Ошибочно использовать обратную косую черту перед любым буквенным символом, который не обозначает экранированную конструкцию; они зарезервированы для будущих расширений языка регулярных выражений.Обратный слэш может использоваться перед неалфавитным символом независимо от того, является ли этот символ частью неэкранированной конструкции.
Например, ;это не специальный символ в регулярном выражении. Однако, если вы его избежите, Patternвсе равно будет интерпретироваться \;как; . Вот еще несколько примеров:
> становится \> что эквивалентно>
[ становится \[ в ускользнувшую форму[
8 все еще 8 .
\)превращается \\\)в ускользнувшие формы \и (сцепленные.
Примечание: Ключ является определением «неалфавитным», что в документации на самом деле означает «не- слово » символы или символы вне набора символов [a-zA-Z_0-9].