Reputation: 125
i use lucene search but lucene has a bunch of special characters to escape like:
- && || ! ( ) { } [ ] ^ " ~ * ? : \
i am having problem escaping these characters because they are too many and if i use the String.replaceAll() method, i'll just end up having a really long line of code just for escaping the characters. what is the best way to do? thanks!
Upvotes: 10
Views: 7023
Reputation: 123
There is a Apache Commons Library for that: http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html
Upvotes: -1
Reputation: 245
Use regular expression to replace those characters in one go.
example:
String s="some text && || []!{} ()^*?~ and ";
Pattern p= Pattern.compile("([-&\\|!\\(\\){}\\[\\]\\^\"\\~\\*\\?:\\\\])");
s=p.matcher(s).replaceAll("\\\\$1");
System.out.println(s);\\prints some text \&\& \|\| \[\]\!\{\} \(\)\^\*\?\~ and
Upvotes: 2
Reputation: 262814
There is also a method called QueryParser#escape, which may be useful:
Returns a String where those characters that QueryParser expects to be escaped are escaped by a preceding \.
Upvotes: 18
Reputation: 115388
Use regular expression. String.replaceAll()
supports regular expression, so you can solve this problem using one single call. Just be careful: some of these characters are special for regular expressions too, so they mus be escaped "twice":
str.replaceAll("([-\\&\\|!\\(\\)\\{\\}\\[\\]\\^\\"~\\*\\?:\\])", "\\$1");
(I have not tried this, probably this line needs some fixes, but this is the idea)
Upvotes: 0