我有一个Android应用程序,我必须找出我的用户是否在字符串上输入特殊字符'\'。但是我没有通过使用string.replaceAll()方法获得成功,因为Java将\识别为字符串的结尾,而不是“结束标记。有没有人建议如何解决这个问题? 以下是我尝试执行此操作的示例:
private void ReplaceSpecial(String text) {
if (text.trim().length() > 0) {
text = text.replaceAll("\", "%5C");
}
它不起作用,因为Java不允许我。有什么建议吗?
答案 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}$"
希望有帮助。