如何在Java中使用一个方法转义一组特殊字符?

10

我使用Lucene搜索,但是Lucene有一堆需要转义的特殊字符,例如:

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

这些字符太多了,如果我使用String.replaceAll()方法进行转义,最终代码将会变得非常冗长。请问有什么更好的方法吗?谢谢!

4个回答

18

还有一种称为QueryParser#escape的方法,可能很有用:

返回一个字符串,其中QueryParser希望转义的字符通过前置\进行转义。


是的,它有效,并且我只是减少并保存了代码行。非常感谢! - maccramers

2

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

示例:

 String s="some text && || []!{} ()^*?~ and ";
        Pattern p= Pattern.compile("([-&\\|!\\(\\){}\\[\\]\\^\"\\~\\*\\?:\\\\])");

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

0

使用正则表达式。String.replaceAll()支持正则表达式,因此您可以使用一个单一的调用来解决这个问题。只要小心:其中一些字符对于正则表达式也是特殊的,因此它们必须被“双重”转义:

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

(我还没有尝试过这个,可能这行代码需要一些修复,但这就是思路)



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接