在字符串的特殊字符前添加转义“\\”

新手上路,请多包涵

我有一个简单的 SQL 查询,我在其中检查查询是否与我拥有的任何字段匹配。我为此使用 LIKE 语句。我的字段之一可以有特殊字符,搜索查询也是如此。所以我正在寻找一种解决方案,我需要在特殊字符前面转义“\”。

 query = "hello+Search}query"

我需要将以上内容更改为

query = "hello\+Search\}query"

除了分别搜索每个特殊字符并添加“\”之外,是否有一种简单的方法可以做到这一点。因为如果我没有转义字符,我会收到错误消息

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0

提前致谢

原文由 Visahan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

确定要转义的特殊字符并调用

query.replace("}", "\\}")

您可以将允许的所有特殊字符保留在某个数组中,然后对其进行迭代并替换出现的示例。此方法替换所有 正则表达式元字符

 public String escapeMetaCharacters(String inputString){
    final String[] metaCharacters = {"\\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%"};

    for (int i = 0 ; i < metaCharacters.length ; i++){
        if(inputString.contains(metaCharacters[i])){
            inputString = inputString.replace(metaCharacters[i],"\\"+metaCharacters[i]);
        }
    }
    return inputString;
}

您可以将其用作 query=escapeMetaCharacters(query); 不要认为您会找到的任何库都可以做更多的事情。它充其量定义了一个完整的特殊字符列表。

原文由 Laurentiu L. 发布,翻译遵循 CC BY-SA 4.0 许可协议

实际上有一种更好的方法可以以圆滑的方式做到这一点。

 String REGEX = "[\\[+\\]+:{}^~?\\\\/()><=\"!]";

StringUtils.replaceAll(inputString, REGEX, "\\\\$0");

原文由 Tauseef Rahaman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题