繁体   English   中英

我怎样才能用一种方法在java中转义一组特殊字符?

[英]how can i escape a group of special characters in java in one method?

我使用 lucene 搜索,但 lucene 有一堆特殊字符可以转义,例如:

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

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

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

返回一个字符串,其中 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");

(我没有试过这个,可能这条线需要一些修复,但这是想法)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM