使用SQL语句进行搜索出的内容,如何忽略大小写并添加高亮效果

实现

  • 给定需要高亮的字段 str,以及关键字keyword
  • 我们将str字段使用 str.toLowerCase() 方法,全部转换成小写,并将该字段定义为 lowerCaseStr
  • 同理,也将keyword转换为小写, 定义为 lowerCaseKeyword
  • 然后使用 lowerCaseStr.split(lowerCaseKeyword) 将字符串切割成多份
  • 然后我们就需要记录每个切割后的字符串的开始角标和结束角标
  • 然后通过角标,从原始的字符串中截取字符串str,存储在list中
  • 最后通过循环逐个添加关键字代码

完整代码

  /**
     * 添加高亮
     * @param str
     * @param keyword
     * @return
     */
    private String getHitCode(String str , String keyword) {

        if(StringUtils.isEmpty(keyword) || StringUtils.isEmpty(str)) {
            return str;
        }

        String lowerCaseStr = str.toLowerCase();
        String lowerKeyword = keyword.toLowerCase();
        String [] lowerCaseArray = lowerCaseStr.split(lowerKeyword);

        Boolean isEndWith = lowerCaseStr.endsWith(lowerKeyword);

        // 计算分割后的字符串位置
        Integer count = 0;
        List<Map<String, Integer>> list = new ArrayList<>();
        List<Map<String, Integer>> keyList = new ArrayList<>();
        for(int a=0; a<lowerCaseArray.length; a++) {

            // 将切割出来的存储map
            Map<String, Integer> map = new HashMap<>();
            Map<String, Integer> keyMap = new HashMap<>();
            map.put("startIndex", count);
            Integer len = lowerCaseArray[a].length();
            count += len;
            map.put("endIndex", count);
            list.add(map);

            if(a < lowerCaseArray.length -1 || isEndWith) {
                // 将keyword存储map
                keyMap.put("startIndex", count);
                count += keyword.length();
                keyMap.put("endIndex", count);
                keyList.add(keyMap);
            }

        }

        // 截取切割对象
        List<String> arrayList = new ArrayList<>();
        for(Map<String, Integer> item : list) {
            Integer start = item.get("startIndex");
            Integer end = item.get("endIndex");
            String itemStr = str.substring(start, end);
            arrayList.add(itemStr);
        }

        // 截取关键字
        List<String> keyArrayList = new ArrayList<>();
        for(Map<String, Integer> item : keyList) {
            Integer start = item.get("startIndex");
            Integer end = item.get("endIndex");
            String itemStr = str.substring(start, end);
            keyArrayList.add(itemStr);
        }

        String startStr = "<span style = 'color:red'>";
        String endStr = "</span>";
        StringBuffer sb = new StringBuffer();

        for(int a=0; a<arrayList.size(); a++) {

            sb.append(arrayList.get(a));

            if(a < arrayList.size() - 1 || isEndWith) {
                sb.append(startStr);
                sb.append(keyArrayList.get(a));
                sb.append(endStr);
            }
        }
        return sb.toString();
    }

来自蘑菇博客 http://www.moguit.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值