Обратите внимание, что вы можете напрямую использовать String#replaceAll
для сопоставления и замены нескольких подстрок регулярным выражением по вашему выбору. Кроме того, String#replace
не принимает регулярные выражения, поэтому ваш c=c.replace("\\+", "\\\\"+"+");
не будет работать.
Вы можете использовать
String c = "edX-NYIF+CR.5x";
System.out.println(c.replaceAll("[^a-zA-Z0-9]", "\\\\\\\\$0"));
См. онлайн-демонстрацию Java
[^a-zA-Z0-9]
(или "\\P{Alnum}"
) будет соответствовать любому символу, кроме буквы или цифры, и тогда "\\\\\\\\$0"
(= \\\\$0
буквенная строка) заменит совпадение с самим собой, с добавлением двух буквенных обратных косых черт. Обратите внимание, что литеральная обратная косая черта (которая указывается в строковом литерале Java с использованием двух последовательных обратных косых черт) - это специальный escape-символ регулярного выражения, который необходимо удвоить, чтобы указать одну обратную косую черту, которая будет помещена в полученную строку.
Если вас путают обратные косые черты и вы хотите получить одинарные (не двойные) обратные косые черты на выходе, удалите 4 обратных косых черты из шаблона замены, .replaceAll("[^a-zA-Z0-9]", "\\\\$0")
.