zoukankan      html  css  js  c++  java
  • mongoTemplate对包含特殊字符的模糊查询处理

    场景: 根据地址模糊查询  例如:北京航空航天大学(学院路校区)学院路37号院-211号楼 

    java代码如下:
    
                Pattern pattern = Pattern.compile("^.*" + detectRecordRequest.getAddr() + ".*$", Pattern.CASE_INSENSITIVE);
                Criteria c5 = Criteria.where("addr").regex(pattern);
                query.addCriteria(c5);

    此段代码如果根据“学院路37号院-211号楼”,“(学院路校区)”等是可以查询到结果,但如果根据全地址查询结果为空,这不符合要求。

    原因在哪里呢?

    答案是因为此段字符串中包含特殊字符“()”,需要特殊处理。

    代码如下:
    
        //regex对输入特殊字符转义
        private String escapeSpecialWord(String keyword) {
            if (StringUtils.isNotBlank(keyword)) {
                String[] fbsArr = { "\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
                for (String key : fbsArr) {
                    if (keyword.contains(key)) {
                        keyword = keyword.replace(key, "\" + key);
                    }
                }
            }
            return keyword;
        }
    查询代码如下:
    
                Pattern pattern = Pattern.compile(".*?" + escapeExprSpecialWord(detectRecordRequest.getAddr()) + ".*");
                Criteria c5 = Criteria.where("addr").regex(pattern);
                query.addCriteria(c5);

    再次查询 结果符合预期。

  • 相关阅读:
    selenium 18种元素定位方法
    python3+selenium配置可能报错记录
    adb+monkey压力测试入门
    appscan使用教程(全)
    appium---android元素定位
    QTP自动化测试
    postman Could not get any response。
    Jmeter接口测试+压力测试
    Android 偏门xml属性
    CrashHandler
  • 原文地址:https://www.cnblogs.com/lfyu/p/13807309.html
Copyright © 2011-2022 走看看