Добавить специальный символ с двойной черной косой чертой [\\] в String Java - PullRequest
1 голос
/ 10 июня 2019

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

        String c= "edX-NYIF+CR.5x";
        Pattern pt = Pattern.compile("[^a-zA-Z0-9]");
        Matcher match= pt.matcher(c);
         while(match.find())
        {
            String s= match.group();
            c=c.replace("\\+", "\\\\"+"+");
          //  c=c.replaceAll("-", "-\\");
           // c=c.replaceAll("\\.", ".\\");

        }

Ввод:

edX-NYIF+CR.5x

Ожидаемый результат:

edX\\-NYIF\\+CR\\.5x

1 Ответ

2 голосов
/ 10 июня 2019

Обратите внимание, что вы можете напрямую использовать 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").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...