2013-04-11 197 views
0

我有一个android应用程序,我必须找出我的用户是否在字符串中输入特殊字符'\'。但我没有通过使用string.replaceAll()方法获得成功,因为Java将\识别为字符串的结尾,而不是“结束标记”。有没有人有如何解决这个问题的建议? 这是一个例如我如何试图做到这一点:Android''特殊字符

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

它不起作用,因为Java不允许我有什么建议

+3

\是特殊字符也,所以你要关闭他,使用\\ – 2013-04-11 14:13:45

+0

这不是一个'android'功能。这是Java语言 – Andremoniy 2013-04-11 14:14:51

回答

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 2013-04-11 14:18:06

+0

@ user1517951如果此答案解决了您的问题,您应该[接受它](http://meta.stackexchange.com/a/5235/186652)。还有一些[以前的问题](http://stackoverflow.com/users/1517951/user1517951?tab=questions)也有解决你的问题的答案。试着接受他们。 – Pshemo 2013-04-11 14:35:25

1

首先,由于“\”是Java中的转义字符,因此您需要使用两个反斜杠才能获得一个反斜杠。其次,由于replaceAll()方法将正则表达式作为参数,因此您还需要将该反斜杠转义。因此,你需要使用

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

逃脱它尝试

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

replaceAll使用正则表达式语法,其中\是特殊字符,所以你需要逃避它。要做到这一点,你需要通过\\到正则表达式引擎,而是创建一个表示字符串的正则表达式\\你需要把它写成"\\\\"\也是特殊字符的字符串,需要另一种逃避每个\


为了避免你可以使用replace这个表达式烂摊子这是工作于文字

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

+1,用于推荐'replace'而不是'replaceAll' – 2013-04-11 14:18:20