我使用lucene搜索,但lucene有一堆特殊字符可以逃脱:
- && || ! ( ) { } [ ] ^ " ~ * ? : \
我有问题转义这些字符,因为它们太多了,如果我使用String.replaceAll()方法,我最终会有一个很长的代码行只是为了转义字符。什么是最好的方法?谢谢!
答案 0 :(得分:18)
还有一种名为QueryParser#escape的方法,它可能很有用:
返回一个String,其中QueryParser期望转义的那些字符由前面的\来转义。
答案 1 :(得分:2)
使用正则表达式一次性替换这些字符。
示例:
String s="some text && || []!{} ()^*?~ and ";
Pattern p= Pattern.compile("([-&\\|!\\(\\){}\\[\\]\\^\"\\~\\*\\?:\\\\])");
s=p.matcher(s).replaceAll("\\\\$1");
System.out.println(s);\\prints some text \&\& \|\| \[\]\!\{\} \(\)\^\*\?\~ and
答案 2 :(得分:0)
使用正则表达式。 String.replaceAll()
支持正则表达式,因此您可以使用一次调用来解决此问题。请注意:其中一些字符对于正则表达式也是特殊的,因此它们可以被转义"两次":
str.replaceAll("([-\\&\\|!\\(\\)\\{\\}\\[\\]\\^\\"~\\*\\?:\\])", "\\$1");
(我没试过这个,可能这行需要一些修复,但这就是想法)
答案 3 :(得分:-1)