在我的Java代码,如果一个字符串输入已得到所提及的任何特殊字符,应该让前面加\\
特殊字符集为{+, -, &&, ||, !, (, ), {, },[, ], ^, "", ~, *, ?, :, \}
。 我试着用String.replaceAll(old,new)
但让我吃惊它不工作,即使我给了“老”和“新”正确的价值观。
if old=":",new="\:"
我把特殊字符的字符串数组,迭代它在一个for循环,检查是否存在字符串中,如果是, input.replaceAll(":","\\:")
但它没有给我想要的输出。 请帮忙
String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}",
"[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };
for (int i = 0; i < arr.length; i++) {
//'search' is my input string
if (search.contains((String) arr[i])) {
String oldString = (String) arr[i];
String newString = new String("\\" + arr[i]);
search = search.replaceAll(oldString, newString);
String newSearch = new String(search.replaceAll(arr[i],
newString));
}
}
一旦你意识到的replaceAll需要一个正则表达式,它只是一个编码字符你作为一个正则表达式的问题。
试试这个:
String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\");
这怪诞的正则表达式是“向前看” - 非捕获断言下面的字符匹配的东西 - 在这种情况下,一个字符类。
请注意,你怎么不需要转义字符一个字符类,除]
(甚至负不需要逃避,如果第一个或最后一个)。
该\\\\
是你如何编写一个正则表达式文字\
(于正则表达式Java换一次,连用)
下面是这个工作的一个测试:
public static void main(String[] args) {
String search = "code:xy";
String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\");
System.out.println(newSearch);
}
输出:
code\:xy
String#replaceAll
需要一个regex
作为第一个参数。 所以,如果在字符串中输入的是你的代码将失败meta-character
-像+
。
您应该使用String#replace
。
而且你不需要过去的分配: -
String newSearch = new String(search.replaceAll(arr[i], newString));
当你不使用它。 你实际上分配修改字符串返回到search
,所以它不是必需的。
此外,而不是使用new String(...)
来构建新的字符串。 其实,你只需要在你的单行if-statement
。
现在好了,这种解释后,你现在可以使用下面的for-loop
: -
for (int i = 0; i < arr.length; i++) {
if (search.contains(arr[i])) {
search = search.replace(arr[i], "\\" + arr[i]);
}
}
尝试使用下面的一个。 请使用替代方法来代替的replaceAll
搜索= search.replace(oldString,newString);
当我尝试下面的代码,它的工作
String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}",
"[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };
for (int i = 0; i < arr.length; i++) {
//'search' is my input string
if (search.contains((String) arr[i])) {
String oldString = (String) arr[i];
String newString = new String("\\" + arr[i]);
search = search.replaceAll(oldString,(String) ("\\" + newString));
}
}
文章来源: Replace special character with an escape preceded special character in Java