java 字符串文本匹配并高亮显示处理

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,要实现字符串的指定高亮显示,可以使用 `javax.swing.text.DefaultHighlighter` 类。该类提供了一组用于高亮显示文本的方法,包括通过指定起始位置和结束位置来高亮显示文本。 示例代码如下: ```java import javax.swing.text.DefaultHighlighter; import javax.swing.text.Highlighter; import javax.swing.text.Highlighter.HighlightPainter; import java.awt.Color; public class HighlightString { public static void main(String[] args) { String text = "这是需要高亮显示文本。"; String highlightText = "高亮"; // 创建高亮显示器 Highlighter highlighter = new DefaultHighlighter(); // 创建高亮显示画笔 HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW); // 在文本中查找需要高亮显示字符串 int index = text.indexOf(highlightText); while (index >= 0) { try { // 高亮显示找到的字符串 highlighter.addHighlight(index, index + highlightText.length(), painter); } catch (Exception e) { e.printStackTrace(); } // 继续查找 index = text.indexOf(highlightText, index + 1); } // 输出高亮显示后的文本 System.out.println("高亮显示后的文本:"); System.out.println(text); } } ``` 在上面的示例中,我们首先创建了一个文本字符串 `text` 和一个需要高亮显示字符串 `highlightText`。然后,我们创建了一个 `DefaultHighlighter` 对象作为高亮显示器,以及一个 `DefaultHighlightPainter` 对象作为高亮显示画笔。 接下来,我们使用 `indexOf()` 方法在文本中查找需要高亮显示字符串,并使用 `addHighlight()` 方法将其高亮显示。由于 `addHighlight()` 方法可能会抛出异常,因此我们使用了一个 try-catch 块来捕获异常并处理。 最后,我们输出高亮显示后的文本。可以看到,匹配字符串已经被以黄色背景的形式高亮显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值