2013-04-11 7 views
0

У меня есть приложение для Android, где мне нужно выяснить, был ли мой пользователь введен специальным символом '\' на строке. Но я не добился успеха, используя метод string.replaceAll(), потому что Java распознает \ как конец строки, а не «закрывающий тег». У кого-нибудь есть предложения, как я могу это исправить? пример того, как я пытался сделать это:Специальный символ Android ''

private void ReplaceSpecial(String text) { 
    if (text.trim().length() > 0) { 
    text = text.replaceAll("\", "%5C"); 
} 

это не работает, потому что Java не позволяет мне любые предложения

+3

\ особый характер и, таким образом, вы должны закрыть его, использовать \\ –

+0

Это не 'android' особенности. Это особенность языка 'Java' – Andremoniy

ответ

2

text = text.replaceAll("\", "%5C");

Должно быть:.?

text = text.replaceAll("\\\\", "%5C");

Почему?

Поскольку обратная косая черта - это символ эвакуации. Если вы хотите, чтобы представлять реальную обратную косую черту, вы должны использовать двойной \ (\\)

Теперь первый аргумент replaceAll является регулярное выражение. Поэтому вам тоже нужно избегать этого! (Который закончится с 4 обратными косыми чертами).

В качестве альтернативы вы можете использовать replace, которые не ожидать регулярное выражение, так что вы можете сделать:

text = text.replace("\\", "%5C");

3

Попробуйте это: Вы должны использовать экранирующий символ '\'

text = text.replaceAll("\\\\", "%5C"); 
2

Первый параметр для replaceAll интерпретируется как регулярное выражение, поэтому вам действительно нужны четыре обратные косые черты:

text = text.replaceAll("\\\\", "%5C"); 

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

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

+0

Это сработало для меня! большое спасибо! – user1517951

+0

@ user1517951 Если этот ответ решает вашу проблему, вы должны [принять это] (http://meta.stackexchange.com/a/5235/186652). Также некоторые из ваших [предыдущих вопросов] (http://stackoverflow.com/users/1517951/user1517951?tab=questions) также содержат ответы, которые решают ваши проблемы. Постарайтесь принять их также. – Pshemo

1

Во-первых, поскольку «\» является символом escape на Java, вам нужно использовать две обратные косые черты, чтобы получить обратную косую черту. Во-вторых, поскольку метод replaceAll() принимает регулярное выражение в качестве параметра, вам также необходимо избежать этой косой черты. Таким образом, вам нужно, чтобы избежать его, используя

text = text.replaceAll("\\\\", "%5C"); 
3

Попробуйте

text = text.replaceAll("\\\\", "%5C"); 

replaceAll использует синтаксис регулярных выражений, где \ особый характер, так что вам нужно, чтобы избежать его.Для этого вам необходимо пройти \\ для регулярных выражений, но чтобы создать строку, представляющую регулярное выражение \\ вы должны написать его как "\\\\" (\ также специальный символ в String, и требует другого побега для каждого \)


Чтобы избежать это регулярное выражение, бардак вы можете просто использовать replace, который работает на литералах

text = text.replace("\\", "%5C"); 
+1

+1 для рекомендации 'replace' вместо' replaceAll' –

Смежные вопросы