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

    再次查询 结果符合预期。

  • 相关阅读:
    解决使用git出现 The file will have its original line endings in your working directory
    SpringBoot集成flowable碰见DMN不能初始化
    CF268D Wall Bars
    CF1327F AND Segments
    P2900 [USACO08MAR]Land Acquisition G
    CF279B Books
    CF859E Desk Disorder
    CF1147B Chladni Figure
    CF1147E Rainbow Coins
    P3565 [POI2014]HOT-Hotels
  • 原文地址:https://www.cnblogs.com/lfyu/p/13807309.html
Copyright © 2011-2022 走看看