在我的java代码中,如果字符串输入中包含任何提到的特殊字符,那么前面应该有\\
特殊字符集为{+, -, &&, ||, !, (, ), {, },[, ], ^, "", ~, *, ?, :, \}
。我尝试使用String.replaceAll(old,new)
,但令我惊讶的是它不起作用,即使我为'old'和'new'提供了正确的值。
if old=":",new="\:"
我将特殊字符放在一个String数组中,在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));
}
}
答案 0 :(得分:10)
一旦你意识到replaceAll需要一个正则表达式,这只是将你的字符编码为正则表达式的问题。
试试这个:
String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\");
那个糟糕的正则表达式是“向前看” - 一个非捕获断言,以下char匹配某些东西 - 在本例中是一个字符类。
注意除了]
之外你不需要在字符类中转义字符(即使是第一个或最后一个也不需要转义)。
\\\\
是你编写正则表达式文字\
的方法(对于java,一次为正则表达式转义一次)
以下是对此工作的测试:
public static void main(String[] args) {
String search = "code:xy";
String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\");
System.out.println(newSearch);
}
输出:
code\:xy
答案 1 :(得分:3)
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]);
}
}
答案 2 :(得分:2)
尝试使用下面的一个。请使用替换方法而不是ReplaceAll
search = search.replace(oldString,newString);
答案 3 :(得分:0)
当我尝试下面的代码时,它工作了
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));
}
}