import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;/*** @author hutf* @createTime 2022年07月21日 20:39:00*/
public class MLightUtils {/*** @param list 数据源匹配 例如: {"难的","这世界","世界上最", "世界上最难", "最难的职业","意志","坚韧不拔","职业就是","程序员","他们"}* @param str 你所要处理的字符串 例如: 世界上最难的职业* @param leftTag 左标签字符串 例如:<font style='color:red;'>* @param rightTag 右标签字符串 例如:</font>* @return*/public static String getMRedText(List<String> list, String str,String leftTag,String  rightTag) {if (leftTag == null || "".equals(leftTag)) leftTag = "<font style='color:red;'>";if (rightTag == null || "".equals(rightTag)) rightTag = "</font>";List<MLight> l = new ArrayList<>();for (String item : list) {if (str.contains(item)) {int startIndex = str.indexOf(item);int endIndex = startIndex + item.length() - 1;l.add(new MLight(startIndex, 0,leftTag));l.add(new MLight(endIndex, 1,rightTag));}}if (l.size() == 0) return str;Collections.sort(l, (o1, o2) -> {if (o1.getIndex().equals(o2.getIndex())) return o2.getType() - o1.getType();return o1.getIndex() - o2.getIndex();});char[] strChars = str.toCharArray();StringBuffer sb = new StringBuffer();for (int i = 0; i < strChars.length; i++) {char item = strChars[i];List<MLight> currentIndexMLights = getCurrentMReds(i, l);if (currentIndexMLights.size() == 0) {sb.append(item);continue;}for (MLight item0 : currentIndexMLights) {if (item0.getType() == 0) sb.append(item0.getTagTxt());}sb.append(item);for (MLight item0 : currentIndexMLights) {if (item0.getType() == 1) sb.append(item0.getTagTxt());}}return sb.toString();}// 获取某个位置下的 高亮对象private static List<MLight> getCurrentMReds(Integer index, List<MLight> list) {List<MLight> rs = new ArrayList<>();for (MLight mLight : list) {if (mLight.getIndex().equals(index)) {rs.add(mLight);}}return rs;}// 高亮显示类实体static class MLight {private Integer index;// 目标字符串的 下标private Integer type;// 0代表左边,1代表右边private String tagTxt;// 标签文本字符串public String getTagTxt() {return tagTxt;}public void setTagTxt(String tagTxt) {this.tagTxt = tagTxt;}public Integer getIndex() {return index;}public void setIndex(Integer index) {this.index = index;}public Integer getType() {return type;}public void setType(Integer type) {this.type = type;}public MLight(Integer index, Integer type,String tagTxt) {this.index = index;this.type = type;this.tagTxt = tagTxt;}}
}

java 字符串文本匹配并高亮显示处理相关推荐

  1. java 字符串模糊匹配

    java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现. Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创 ...

  2. 字符串文本匹配神器———Java正则表达式

    什么是正则表达式? 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符. 为什么要学正则表达式 对于正则表达式,相信很多人都 ...

  3. java 字符串模糊匹配_Java实现伪查询(全匹配+模糊匹配)

    Java实现伪查询(全匹配+模糊匹配) 在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱 ...

  4. python123判断字符串结尾_Python学习教程:在字符串的开头和结尾处做文本匹配

    原标题:Python学习教程:在字符串的开头和结尾处做文本匹配 Python学习教程:在字符串的开头和结尾处做文本匹配 我们需要在字符串的开头和结尾处按照指定的文本模式做检查,例如检查文件的扩展名.U ...

  5. Oracle ORA-06861: 文字与格式字符串不匹配 记录两次无助的遭遇:存储过程直接执行正常,java调用存储过程则报错

    一天之内,出现了两次这样的尴尬遭遇:将参数直接放到存储过程中执行时,程序运行正常,但是通过java程序去调用数据库存储过程时,就抛出异常.我和我的同事分别遇到了一次,但是,原因却大不相同. 先说说我的 ...

  6. 【Python】在字符串的头尾做文本匹配

    在字符串的头尾做文本匹配 Python为字符串对象提供了 str.startswith() 和 str.endswith() 两个方法来实现字符串的开头和结尾的文本匹配,返回值为布尔值. >&g ...

  7. 用java实现对字符串文本的哈夫曼编码与解码

    哈夫曼树与编码的创建过程及发展由来 这里基础知识就不再叙述了,请参考博客 https://www.cnblogs.com/alomsc/p/12736502.html#:~:text 写的非常详细,初 ...

  8. java 读取文本 读取每行字符串

    java 读取文本 读取每行字符串 开发中难免遇到一些需要临时处理的问题, 比如产品经理给到你一个TXT文件,帮我把这个数据 怎么怎么样...很急 现在就要 当然这种事情也是见怪不怪 读取文件的代码其 ...

  9. java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

    ·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnc ...

最新文章

  1. AI玩填字游戏,赢得全国锦标赛冠军!官方:不是人,没有奖金和名次
  2. python怎么输入代码-教你如何将自己的脚本代码放到服务器上运行
  3. [转] 移动前端不得不了解的HTML5 head 头标签
  4. genymotion无法安装apk的问题
  5. mysql blob key length_mysql提示used in key specification without a key length
  6. 实作 ASP.NET 多笔数据离线编辑
  7. centos7 使用sendmail 发送邮件
  8. 面试常问:BIO,NIO,AIO
  9. 02 - Tomcat配置
  10. SSM框架-小区物业管理系统(附源码)
  11. matlab 色彩的范围,Matlab - 将2个颜色条设置为带有色彩图和良好范围的2个图例...
  12. 加ing形式的单词有哪些_【动词ing变化规律1、直接 ing2、以辅音字母 y结尾的单词,直接 in...-动词ing形式变化规则-英语-贾翘教同学...
  13. 微信公众号支付(二)
  14. snort实验(一)
  15. 面试现场:今日头条(一面已通过)
  16. 台式电脑共享笔记本电脑的无线网络
  17. rk3288 SDK概览
  18. vue实现调查问卷一页一题,上一题下一题形式
  19. 管程法实现生产者消费者问题
  20. Electron主进程和渲染进程之间通信

热门文章

  1. AccountManager 数据库存储位置
  2. 【图像融合】基于非下采样剪切波变换(NSST)实现红外图像和可见光图像融合matlab代码
  3. javaWeb基础一:JDBC (java操作数据库的技术)
  4. Win7 系统设置虚拟无线热点
  5. linux egg,Ubuntu下egg文件的安装与制作
  6. 三天写完毕业论文——经验分享
  7. rails连接Mysql的数据库
  8. js正则禁止输中文韩文日文
  9. 控制台报错element: <Goods> - did you register the component correctly? For recursive components, make sur
  10. robot.txt是干嘛的?