在我的 java 代码中,如果字符串输入具有提到的任何特殊字符,则前面应加上 \\
特殊字符集为{+, -, &&, ||, !, (, ), {, },[, ], ^, "", ~, *, ?, :,\}
。我尝试使用 String.replaceAll(old,new) ,但令我惊讶的是它不起作用,即使我为“旧”和"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 转义一次,对于 regex 转义一次)
这是对此工作的测试:
public static void main(String[] args) {
String search = "code:xy";
String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\");
System.out.println(newSearch);
}
输出:
code\:xy
关于java - 在 Java 中用特殊字符前面的转义符替换特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696461/