使用Java中特殊字符之前的转义替换特殊字符

在我的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)); } } 

一旦你意识到replaceAll需要一个正则表达式,这只是将你的字符编码为正则表达式的问题。

尝试这个:

 String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\"); 

那个糟糕的正则表达式是“向前看” – 一个非捕获断言,以下char匹配某些东西 – 在这种情况下是一个字符类。

注意你不需要在字符类中转义字符,除了a ] (即使是第一个或最后一个也不需要转义)。

\\\\是你编写正则表达式文字\代码(对于java,一次为正则表达式转义一次)

以下是对此工作的测试:

 public static void main(String[] args) { String search = "code:xy"; String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\"); System.out.println(newSearch); } 

输出:

 code\:xy 

String#replaceAllregex作为第一个参数。 因此,如果字符串中的输入是像- +这样的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 = 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)); } }