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);

    再次查询 结果符合预期。

  • 相关阅读:
    javascript如何封装函数
    addEventListener和attachEvent区别
    Infinity NaN undefined和null
    hasOwnProperty
    蜂巢式图片墙布局
    复选框使用总结
    文本框获得焦点时改变背景颜色
    自定义动画animate
    click()、bind()、live()和delegate()方法
    图片提示效果
  • 原文地址:https://www.cnblogs.com/lfyu/p/13807309.html
Copyright © 2011-2022 走看看