Как найти вхождения подстроки = "\\ r" в строку = "Это строка \\\\ rtest \\ n \\ r" в Java, используя Pattern и matchers - PullRequest
0 голосов
/ 02 сентября 2018

Как найти вхождения подстроки = "\ r" в строку = "Это строка \\ rtest \ n \ r" в Java, используя Pattern и matchers.

Когда я использую

Pattern p4=Pattern.compile("\\r",Pattern.LITERAL);

Даже тогда это не работает

Это хорошо сработало, когда у меня есть строка = "Это строка \\ rtest \\ n \\ r". У меня правильный счет, т. Е. 2 ​​

Но для string="This is a \\\\\rtest \\\n\\\r string". Это дало мне неправильный счет = 1;

функция для вызова:

static int countMatches(Pattern pattern, String string)
{

    Matcher matcher=pattern.matcher(string);
    int count=0;
    int pos=0;
    while(matcher.find(pos))

    {
        count++;
        pos=matcher.start()+1;

    }

    return count;

}

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

В строке вы можете использовать \\, если хотите экранировать символ. Так в твоей строке

String string="This is a \\\rtest \\n\\r string";

В этой строке \\\rtest часть экранирует часть \r с двойной обратной косой чертой \\.

Это \r имеет значение в библиотеке строк. Вы можете прочитать этот вопрос: \ r diff \ n

Так что в вашем примере \ r не мог видеть в вашей переменной строку. Если вы измените строку с этим, вы можете получить результат как 2 ;

String string="This is a \\\rtest \\n\\r string";

во второй части вашей строки как \\n\\r сохраняется \n с \ и \r с \.

Короче, измените строку, чтобы получить результат правильно. если вы напишите двойной забой перед чем-нибудь, вы будете убегать после символа.

0 голосов
/ 02 сентября 2018

Проблема в том, что строка "This is a \\\rtest \\n\\r string" действительно не содержит двух вхождений '\\r'. первый случай интерпретируется компилятором как два символа '\\' (который представляет собой один задний отступ '\') и '\r' (что-то непечатаемое)

Это также верно для "This is a \\\\\rtest \\n\\r string" или любого другого нечетного числа обратных слешей

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