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

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

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

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

还有一个名为QueryParser#escape的方法,它可能很有用:

返回一个String,其中QueryParser期望转义的那些字符由前面的\转义。

使用正则表达式一次性替换这些字符。

例:

  String s="some text && || []!{} ()^*?~ and "; Pattern p= Pattern.compile("([-&\\|!\\(\\){}\\[\\]\\^\"\\~\\*\\?:\\\\])"); s=p.matcher(s).replaceAll("\\\\$1"); System.out.println(s);\\prints some text \&\& \|\| \[\]\!\{\} \(\)\^\*\?\~ and 

使用正则表达式。 String.replaceAll()支持正则表达式,因此您可以使用一次调用来解决此问题。 请注意:其中一些字符对于正则表达式也是特殊的,因此它们可以“两次”转义:

str.replaceAll("([-\\&\\|!\\(\\)\\{\\}\\[\\]\\^\\"~\\*\\?:\\])", "\\$1");

(我没试过这个,可能这行需要一些修复,但这是个主意)

有一个Apache Commons Library: http : //commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html