如何在一个方法中逃避java中的一组特殊字符?

时间:2012-02-17 06:26:43

标签: java lucene character

我使用lucene搜索,但lucene有一堆特殊字符可以逃脱:

- && || ! ( ) { } [ ] ^ " ~ * ? : \

我有问题转义这些字符,因为它们太多了,如果我使用String.replaceAll()方法,我最终会有一个很长的代码行只是为了转义字符。什么是最好的方法?谢谢!

4 个答案:

答案 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)