如何在Java中一次性从整个字符串中转义所有特殊字符

Lucene支持转义属于查询语法的特殊字符。 当前列表中的特殊字符是

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

要逃避这些角色,请在角色前使用\。 例如,搜索(1 + 1):2使用查询:

 \(1\+1\)\:2 

我的问题是如何一次性逃离整个弦乐? 例如myStringToEscape = "ABC^ " ~ * ? :DEF"; myStringToEscape = "ABC^ " ~ * ? :DEF";如何获取escapedString

您可以使用QueryParser.escape ,例如:

 String escapedString = queryParser.escape(searchString); queryParser.parse("field:" + escapedString); 

如果你只是在寻找简单的替代品,那就可以了。

 String regex = "([+\\-!\\(\\){}\\[\\]^\"~*?:\\\\]|[&\\|]{2})"; String myStringToEscape = "ABC^ \" ~ * ? :DEF"; String myEscapedString = myStringToEscape.replaceAll(regex, "\\\\$1"); System.out.println(myEscapedString); 

这将输出:

 ABC\^ \" \~ \* \? \:DEF