Android'\'特殊字符

时间:2013-04-11 14:12:26

标签: java backslash

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

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

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

6 个答案:

答案 0 :(得分:3)

试试这个:你必须使用转义字符'\'

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

答案 1 :(得分:3)

尝试

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

replaceAll使用正则表达式语法,其中\是特殊字符,因此您需要将其转义。为此,您需要将\\传递给regex引擎,但要创建表示正则表达式\\的字符串,您需要将其写为"\\\\"\也是String中的特殊字符,每个\)需要另一次转义


为了避免这种正则表达式混乱,你可以使用正在处理文字的replace

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

答案 2 :(得分:2)

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

应该是:

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

<强>为什么吗

由于反斜杠是转义字符。如果你想表示一个真正的反斜杠,你应该使用双\\\

现在replaceAll的第一个参数是正则表达式。所以你也需要逃避这个! (最终会得到4个反斜杠)。

或者你可以使用期望正则表达式的replace,所以你可以这样做:

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

答案 3 :(得分:2)

replaceAll的第一个参数被解释为正则表达式,因此实际上需要四个反斜杠:

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

字符串文字中的四个反斜杠表示实际String中的两个反斜杠,这反过来表示与单个反斜杠字符匹配的正则表达式。

或者,按Pshemo的建议使用replace代替replaceAll,{{3}}将其第一个参数视为文字字符串而不是正则表达式。

答案 4 :(得分:1)

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

来逃避它
text = text.replaceAll("\\\\", "%5C");

答案 5 :(得分:0)

我可能会迟到,但并非最不重要。

在正则表达式后添加\\\\,以启用\

正则表达式示例:

private val specialCharacters = "-@%\\[\\}+'!/#$^?:;,\\(\"\\)~`.*=&\\{>\\]<_\\\\"
private val PATTERN_SPECIAL_CHARACTER = "^(?=.*[$specialCharacters]).{1,20}$"

希望有帮助。