Java не работает с regex \ s, говорит: неверная escape-последовательность - PullRequest
38 голосов
/ 29 апреля 2010

Я хочу заменить все пробельные символы в строке на «+» и все «ß» на «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", "+");
}

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

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

Ответы [ 3 ]

60 голосов
/ 29 апреля 2010

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

start_from  = start_from.replaceAll("\\s", "+");
9 голосов
/ 29 апреля 2010

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

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

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

replaceAll("\\s", "+");
1 голос
/ 29 апреля 2010

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

...