Java не работает с regex \s, говорит: недопустимая escape-последовательность

Я хочу заменить все пробельные символы в строке с "+" и весь "ß" с "ss"... это работает хорошо на "ß", но так или иначе затмите, не позволит мне использовать \s для пробела.. Я попробовал "\t" вместо этого, но он не работает также.. Я получаю следующую ошибку:

Недопустимая escape-последовательность (допустимые являются \b \t \n \f \r \" \' \),

это - мой код:

try {
    String temp1 = from.getText().toString();
    start_from  = temp1.replaceAll("ß", "ss");
    start_from  = start_from.replaceAll("\s", "+");
}

почему это не работает? действительно ли это - проблема с андроидом, затмением или что?

заранее спасибо!

39
задан Ashvin Sharma 11 October 2019 в 13:15
поделиться

3 ответа

Вам нужно избегать косой черты

start_from  = start_from.replaceAll("\\s", "+");
61
ответ дан 27 November 2019 в 02:34
поделиться

Проблема в том, что \ является escape-символом в шаблонах регулярных выражений java , а также . Если вы хотите сопоставить шаблон регулярного выражения \ n , скажем, и вы должны написать

replaceAll("\n", "+");

Шаблон регулярного выражения не будет в конечном итоге \ n : он будет en до фактического перевода строки, поскольку это то, что означает "\ n" в Java. Если вы хотите, чтобы шаблон содержал обратную косую черту, вам нужно убедиться, что вы экранировали эту обратную косую черту, чтобы она не рассматривалась как специальный символ в строке.

replaceAll("\\s", "+");
9
ответ дан 27 November 2019 в 02:34
поделиться

Вы можете использовать класс java.util.regex.Pattern и использовать что-то вроде p = Pattern.compile ("\ s"); в сочетании с p.matcher (start_from) .replaceAll ("+") . В качестве альтернативы просто экранируйте метасимвол "\ s" как "\\ s".

1
ответ дан 27 November 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: