zoukankan      html  css  js  c++  java
  • 模糊查询(排除%等通配符并支持不连续关键字查询)

    前段时间我在开发项目的时候,就关于模糊查询遇到了一点问题,主要是有两大问题:1、通配符问题;2、不连续关键字查询。下面我一一说出我是怎么解决的:

    1、统配符问题

    比如说在搜索框中输入'%'、'_'、'/'时会出错,因为这些特殊符号在sql语句查询的时候是有他特定的意义的,所有这里要对前台传过来的keyword搜索内容进行排除通配符处理,我是在工具类中写了一个方法代码如下:

    /**
    * 根据搜索特殊字符串
    * @param id
    * @return 取不到返回null
    */
    public static String specialStr(String str){
    Integer index=str.indexOf("%");
    Integer index1=str.indexOf("_");
    Integer index2=str.indexOf("/");
    StringBuffer stringBuffer = new StringBuffer(str);
    if(index!=-1) {
    stringBuffer.insert(index, "\");
    }
    if(index1!=-1) {
    stringBuffer.insert(index1, "\");
    }
    if(index2!=-1) {
    stringBuffer.insert(index2, "\");
    }
    return stringBuffer.toString();

    }

    然后在controller层导入该工具类,使用specialStr方法就ok了,代码如下:

    String keyword = request.getParameter("keyword");
    String keyword1 = "";
    if (!"".equals(keyword) && keyword != null) {
    keyword1 = CommonUtils.specialStr(request.getParameter("keyword"));// 排除%等通配符

    }最后将keyword1作为搜索内容带到数据库中查询就行了。

    2、不连续关键字查询

    当在搜索框中输入不连续的关键字时,也能从数据库中搜索的到该内容,就比如:我想搜索公司名称为阿里巴巴的数据信息时,我输入阿巴也能搜索的到阿里巴巴,这该怎么处理呢?其实很简单,也是写一个工具类,将搜索框中的字符串每两个字符之间都加上一个‘%’就ok了,具体代码如下:


    public static String specialStrKeyword(String str){
    if(str==null||str==""){
    return null;
    }
    StringBuffer stringBuffer = new StringBuffer(str);
    int length=str.length();
    for (int i = 0; i <length; i++) {
    char chari=stringBuffer.charAt(i); 
    if(i==0){
    if(chari=='%'||chari=='_'||chari=='\'){
    stringBuffer.insert(i, "\");
    i++;
    length++;
    }
    }else{
    if(chari=='%'||chari=='_'||chari=='\'){
    stringBuffer.insert(i, "%\");
    i+=2;
    length+=2;
    }else{
    stringBuffer.insert(i, "%");
    i++;
    length++;
    }
    }
    }
    return stringBuffer.toString();

    }

    同样在controller层导入该工具类,使用specialStrKeyword方法就ok了,代码如下:

    String keyword = request.getParameter("keyword");
    String keyword1 = '';
    if (!"".equals(keyword) && keyword != null) {
    keyword1 = CommonUtils.specialStr(request.getParameter("keyword"));// 排除%等通配符
    keyword1 = CommonUtils.specialStrKeyword(keyword1);
    }

    最后将keyword1作为搜索内容带到数据库中查询就行了。

     
     
     
     
  • 相关阅读:
    Vue打包之后部署到 express 服务器上
    Vue 点击事件传递原生DOM事件?
    CSS hover 改变另外一个元素状态
    element-UI el-table二次封装
    element-UI el-table添加序号列时序号永远都是从1开始?
    element-UI el-table表格根据搜索条件表格值改变颜色
    HTML head meta标签详细
    CodeForces 489C Given Length and Sum of Digits... (dfs)
    CodeForces 489B BerSU Ball (水题 双指针)
    Codeforces 489A SwapSort (水题)
  • 原文地址:https://www.cnblogs.com/yuluoxingkong/p/10911543.html
Copyright © 2011-2022 走看看