maccramers
maccramers

Reputation: 125

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

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

Answers (4)

anzaan
anzaan

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

Thilo
Thilo

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

AlexR
AlexR

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

Related Questions