java - цифры - Метод String's replaceAll() и escape-символы




регулярные выражения java онлайн (5)

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

String trickyString = "$Ha!I'm tricky|.|";
String safeToUseInReplaceAllString = Pattern.quote(trickyString);

Линия

System.out.println("\\");

печатает одну обратную косую черту ( \ ). А также

System.out.println("\\\\");

печатает двойные косые черты ( \\ ). Понял!

Но почему в следующем коде:

class ReplaceTest
{
    public static void main(String[] args)
    {
        String s = "hello.world";
        s = s.replaceAll("\\.", "\\\\");
        System.out.println(s);
    }
}

это выход:

hello\world

вместо

hello\\world

В конце концов, метод replaceAll() заменяет точку ( \\. ) На ( \\\\ ).

Может кто-нибудь, пожалуйста, объясните это?


Мне не нравится эта реализация регулярных выражений. Мы должны быть в состоянии экранировать символы с одним «\», а не «\». Но в любом случае, если вы хотите получить ЭТО.Out_Of_That, что вы можете сделать:

String prefix = role.replaceFirst("(\\.).*", "");

Таким образом, вы получите префикс = ЭТО;


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

Это, однако, означает, что обратная косая черта является специальным символом, поэтому, если вы действительно хотите использовать обратную косую черту, ее необходимо экранировать.

Это означает, что он должен быть дважды экранирован при использовании его в строке Java. (Сначала для парсера строк, затем для парсера регулярных выражений.)


Это отформатированное дополнение к моему комментарию

s = s.replaceAll("\\.", Matcher.quoteReplacement("\\"));  

БОЛЬШЕ ЧИТАЕТ И ОЗНАЧАЕТ

s = s.replaceAll("\\.", "\\\\\\");

replaceAll говорит:

Обратите внимание, что обратная косая черта (\) и знак доллара ($) в строке замены могут привести к тому, что результаты будут отличаться от результатов, которые обрабатываются как буквенная строка замены; смотрите Matcher.replaceAll. Используйте Matcher.quoteReplacement (java.lang.String), чтобы при желании подавить специальное значение этих символов.





string