Android实现自动匹配关键字并且标红功能

发布时间 - 2026-01-11 01:05:16    点击率:

本文实例为大家分享了Android匹配关键字标红的具体代码,供大家参考,具体内容如下

1. 单关键字匹配

若只需匹配 搜索内容  可以写的简单一些,代码如下:

if (name != null && name.contains(mKeyWord)) { 
   int index = name.indexOf(mKeyWord); 
   int len = mKeyWord.length(); 
   Spanned temp = Html.fromHtml(name.substring(0, index) 
     + "<font color=#FF0000>" 
     + name.substring(index, index + len) + "</font>" 
     + name.substring(index + len, name.length())); 
 
   holder.tv_name.setText(temp); 
  } else { 
   holder.tv_name.setText(name); 
} 

上面的name是你要显示整个item内容,  mKeyWord 是搜索的关键字  holder.tv_name 是当前textview控件 

2.多关键字匹配

有的时候我们做搜索的时候 是需要将用户输入的关键字在服务端做拆分,拆分为多个关键字去搜索。那么服务端返回数据的时候关键字被拆分为多个。也就是返回的是一个关键字数组。

这种情况我们在客户端做  关键字匹配的时候就要写一个算法,将段落中的多个关键字全部匹配并且标出来。

代码如下:

adapter里面逻辑:

/** 
 name 是item显示内容 当前item显示字符串内容 
 keyList 是指存放 多个关键字的list集合 
*/ 
StringBuffer str = new StringBuffer(""); 
str = Utils.addChild(name, keyList, str); 
holder.contentTv.setText(Html.fromHtml(str.toString())); 
/** 
 * 多关键字查询表红,避免后面的关键字成为特殊的HTML语言代码 
 * @param str  检索结果 
 * @param inputs 关键字集合 
 * @param resStr 表红后的结果 
 */ 
public static StringBuffer addChild(String str,List<String> inputs,StringBuffer resStr){ 
 int index=str.length();//用来做为标识,判断关键字的下标 
 String next="";//保存str中最先找到的关键字 
 for (int i = inputs.size() -1 ; i>= 0;i--) { 
  String theNext=inputs.get(i); 
  int theIndex=str.indexOf(theNext); 
  if(theIndex==-1){//过滤掉无效关键字 
   inputs.remove(i); 
  }else if(theIndex<index){ 
   index=theIndex;//替换下标 
   next=theNext; 
  } 
 } 
 
 //如果条件成立,表示串中已经没有可以被替换的关键字,否则递归处理 
 if(index==str.length()){ 
  resStr.append(str); 
 }else{ 
  resStr.append(str.substring(0,index)); 
  resStr.append("<font color='#FF0000'>"+str.substring(index,index+next.length())+"</font>"); 
  String str1=str.substring(index+next.length(),str.length()); 
  addChild(str1,inputs,resStr);//剩余的字符串继续替换 
 } 
 return resStr; 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android匹配关键字标红  # Android单关键字匹配  # Android多关键字匹配  # Android Java实现余弦匹配算法示例代码  # Android 蓝牙自动匹配PIN码跳过用户交互示例  # Android实现动态自动匹配输入内容功能  # Android 搜索结果匹配关键字且高亮显示功能  # Android文字匹配度算法及实际应用示例  # 多个  # 递归  # 服务端  # 的是  # 你要  # 是指  # 只需  # 这种情况  # 大家分享  # 具体内容  # 大家多多  # 要写  # 客户端  # 过滤掉  # length  # Spanned  # len  # indexOf  # index  # lt 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: BootStrap整体框架之基础布局组件  进行网站优化必须要坚持的四大原则  html5的keygen标签为什么废弃_替代方案说明【解答】  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Java遍历集合的三种方式  如何快速搭建高效可靠的建站解决方案?  如何在万网自助建站平台快速创建网站?  如何用美橙互联一键搭建多站合一网站?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何快速搭建高效简练网站?  JS碰撞运动实现方法详解  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel怎么上传文件_Laravel图片上传及存储配置  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何实现建站之星域名转发设置?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  JavaScript如何实现类型判断_typeof和instanceof有什么区别  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  动图在线制作网站有哪些,滑动动图图集怎么做?  网站图片在线制作软件,怎么在图片上做链接?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  如何获取免费开源的自助建站系统源码?  *服务器网站为何频现安全漏洞?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  实现点击下箭头变上箭头来回切换的两种方法【推荐】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  如何用西部建站助手快速创建专业网站?