欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 字符串根据给定关键词进行高亮显示

字符串根据给定关键词进行高亮显示

2024/10/24 10:23:13 来源:https://blog.csdn.net/winerpro/article/details/139904520  浏览:    关键词:字符串根据给定关键词进行高亮显示

问题

一般使用搜索引擎的时候我们会发现,搜索出来的内容都对我们搜索的关键词进行了高亮显示, 这样我们能很直观的看出是不是我们想要的结果, 最近我也遇到了类似的功能, 因为关于舆情的系统使用到了ES, 一开始心想ES本身就有支持的API实现起来不难, 但我这里的需求还不太一样: 关键词是一开始就给定了并不是通过用户输入的, 而且给定的关键词个数也比较多,也因此使用ES原生的API我觉得不太合适

思路

其实解决这个问题倒也不难, 因为ES加高亮的原理也就是加高亮的html标签, 我们可以理解为查找替换, 因此我们可以通过实现一个工具类来写一个这样功能, 也很简单

代码工具类

/*** 高亮工具类** @author zzt* @version 1.0* @date 2024/06/20*/
public class HighlighterUtil {public static String highlightKeywords(String text, String keywordString) {if (StringUtils.isNotBlank(text) && StringUtils.isNotBlank(keywordString)) {// 将逗号分隔的关键词字符串转换为数组String[] keywords = keywordString.split(",");// 转义所有关键词,以防止正则表达式中的特殊字符String[] escapedKeywords = new String[keywords.length];for (int i = 0; i < keywords.length; i++) {escapedKeywords[i] = Pattern.quote(keywords[i].trim());}// 将所有关键词连接成一个正则表达式String regex = String.join("|", escapedKeywords);// 构建正则模式Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);// 使用StringBuffer来构建结果字符串StringBuffer result = new StringBuffer();// 替换匹配到的关键词while (matcher.find()) {matcher.appendReplacement(result, "<span style=\"color: red\">" + matcher.group() + "</span>");}matcher.appendTail(result);return result.toString();}return text;}public static void main(String[] args) {String text = "西藏是中国的一个自治区,位于青藏高原。";String keywords = "西藏, 中国, 青藏高原";String highlightedText = highlightKeywords(text, keywords);System.out.println(highlightedText);}}

这样一来该字符串返给前端之后就是一个红色的字体了 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com