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

前端 未结 4 1659
清酒与你
清酒与你 2021-01-11 19:56

i use lucene search but lucene has a bunch of special characters to escape like:

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

i am havin

相关标签:
4条回答
  • 2021-01-11 20:31

    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 
    
    0 讨论(0)
  • 2021-01-11 20:32

    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 \.

    0 讨论(0)
  • 2021-01-11 20:33

    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

    0 讨论(0)
  • 2021-01-11 20:37

    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)

    0 讨论(0)
提交回复
热议问题