如何在一个方法中逃避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
- 在JavaFX中的表中获取Checkbox值
- 当’hibernate.dialect’没有设置hibernate4 tomcat7时,连接不能为null
- 在Java中使用多级HashMap的最佳实践
- Play Framework 2.2.1 – 编译错误:“类索引中的方法呈现不能应用于给定类型;”
- 在有限的时间内进行多个查询的最佳解决方案
- 使JButton重叠
- 我如何一次读取文件x字节? 在java中
- java.lang.IllegalStateException:org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient中没有可用于学生服务的实例
- String to Number转换中的性能问题