使用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#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 = 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)); } }
- exceptionjava.sql.SQLException:参数索引超出范围(1>参数个数,为0)
- 日历以错误的时区返回日期
- java.lang.IllegalStateException:具有@ManyToMany 3实体的同一实体的多个表示forms
- 当我对List进行排序时,它的迭代器会发生什么?
- Java Guice – 如何将整数值绑定到我的类/对象?
- java.text.Parseexception:Unparseable Date
- 在Java上拆分字符串“;”,而不是“\\;”
- DAO架构的必要性是什么?
- Eclipse,AppEngine:java.lang.RuntimeException:无法获取System Java Compiler。 请使用JDK,而不是JRE