原始需求:

有联系人名字为‘张三’、‘张三丰’,搜索‘ZS’可以通过系统提供的Contacts.CONTENT_FILTER_URI搜索到。但是匹配字符串高亮时,无法智能将‘张三’高亮。

细化需求

  1. 需要将中文转换为拼音
  2. 提取拼音的首字母以及所对应原字符串的index
  3. 获取匹配首字母所对应原字符串的index
  4. 根据index高亮字符串

资源库

由于需要将汉字转换为拼音,因此需要引入谷歌ContactsProvider源码里的core-libart.jar包和里面的一个源代码类:HanziToPinyin.java。想用最新的可以在谷歌源码里找到。

要是报错:Conversion to Dalvik format failed with error 1
在项目中新建一个文件夹mylib,把core-libart.jar从libs中移动到新建的mylib中,并右键add to build path

代码

添加一个数据类,用来存储匹配成功的字符下标。

public class HighlightIndex {public final int start;public final int end;public HighlightIndex(int start, int end) {this.start = start;this.end = end;}
}

核心代码

先获取中文全拼,再提取出首字母成一个姓名缩写字符串,在通过关键字匹配姓名缩写,最后将匹配成功的字符对应上原始字符串的下标。

/*** 获取首字母缩略字符匹配的下标* @param input 原字符串* @param prefix 高亮字符串* @return 原字符串需要高亮的下标位置(start和end)List* @author zhuxh2* */public static ArrayList<HighlightIndex> getAcronym(String input, String prefix) {ArrayList<Token> tokens = HanziToPinyin.getInstance().getTokens(input);//姓名缩写StringBuilder acronym = new StringBuilder();//缩写字母indexArrayList<HighlightIndex> indexs = new ArrayList<HighlightIndex>();//匹配后的缩写字母indexArrayList<HighlightIndex> indexsResult = new ArrayList<HighlightIndex>();int index = 0;if (tokens != null && tokens.size() > 0) {for (Token token : tokens) {if (Token.PINYIN == token.type) {acronym.append(token.target.charAt(0));indexs.add(new HighlightIndex(index, index+1));index++;} else {acronym.append(token.source.charAt(0));indexs.add(new HighlightIndex(index, index+1));index = index + token.source.length();while(index < input.length() && input.charAt(index) == ' ')index++;}}int start = indexOfWordPrefix(acronym, prefix);if(start != -1)for(int j = start; j < start + prefix.length(); j++) {indexsResult.add(indexs.get(j));}}return indexsResult;}

说一大堆没有直接来个源码干脆清晰
没有源码的技术博客不是好猿猴
附上源码

匹配中文字符串的拼音首字母或英文字符串的首字母缩写相关推荐

  1. java字符串练习题2、反向输出英文字符串

    java字符串练习题2.反向输出英文字符串 目录 java字符串练习题2.反向输出英文字符串 题目 源码: 优化效率 英文中的14个标点符号 英文符号图标 题目 反向输出英文文章的难度在于单词不能有错 ...

  2. mysql汉字转拼音首字母_MySQL中文汉字转拼音的自定义函数和使用实例(首字的首字母)...

    fristPinyin : 此函数是将一个中文字符串的第一个汉字转成拼音字母 (例如:"中国人"->Z) CREATE FUNCTION `fristPinyin`(P_NA ...

  3. (小甲鱼字符串I编程)1.一个英文字符串,去掉相邻的大写小写如Aa,输出这个字符串 2.字符串按如下存放:它的偶数下标为小写英文字母奇数下标为正整数编写代码将奇数下标的数字转换为上一个字母偏移后的字母

    一.请按照以下规则整理一个给定的字符串 s. 一个整理好的字符串中,两个相邻字符 s[j] 和 s[j+1],其中 0 <= j <= s.length - 2,要满足如下条件: · 若 ...

  4. java 正则拼音_匹配中文普通话汉字拼音正则表达式

    直接上表达式: (a[io]?|ou?|e[inr]?|ang?|ng|[bmp](a[io]?|[aei]ng?|ei|ie?|ia[no]|o|u)|pou|me|m[io]u|[fw](a|[a ...

  5. js 中文汉字按拼音排序,浏览器英文环境也可正确运行

    之前在其他地方看的zh字母分类列表不对,导致部分排序错误,特此记录 最重要的首拼汉字列表: 阿八嚓耷妸发旮哈丌咔垃妈嗯喔妑七呥仨他穵夕丫帀 // sourceData: [{ id: restaura ...

  6. mysql中的汉字怎么转换_Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    一.创建拼音对照表 代码如下: -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) ...

  7. Python编程:Python2和Python3环境下re正则匹配中文

    1.Python2 下测试 中文需要使用\u4e00-\u9fa5 去匹配 示例 1: Python 2.7.5 下匹配中文 # -*- coding: utf-8 -*-import re# 1.默 ...

  8. mysql 模糊匹配比自己短潆字符_mysql中生成字符串对应的英文字母(拼音首字母)...

    mysql中生成字符串对应的英文字母(拼音首字母)的存储过程,触发器和函数 1.规则 1.1.输入字符串长度255(可变),输出字符串10(可变) 1.2.对于全英文字母或数字,输出空格后的首字符,均 ...

  9. java 汉字 字母_JAVA获取中文汉字字符串拼音首字母,英文字符不变的工具类

    java在处理项目需求时,有时需要排序,尤其是中文名字按0-9,A-Z进行首字母排序,这时候就需要首先要得到中文字符串的首字母,然后按照字母顺序进行排序,不多说,直接上代码,看java如何获取中文字符 ...

最新文章

  1. linux的软件包是独立的,Linux系统下软件包的安装
  2. oracle 相同的sql执行两次 执行计划会不一样吗,一条SQL语句,两次执行计划的差距...
  3. 十三、IntelliJ IDEA 中的版本控制介绍(下)
  4. 行人跟踪python_使用Python为初学者构建AI汽车和行人跟踪
  5. 「混合云四部曲」:变革、创新、加速、发展
  6. linux系统atom安装教程,Ubuntu/Linux Mint上安装Atom文本编辑器
  7. Filecoin Gas基础费率跌至4.40 nanoFIL
  8. 三维点云学习(4)5-DBSCNA python 复现-1- 距离矩阵法
  9. 局域网p2p终结者之类流氓软件抢占网速的原理
  10. 终极玩转Power BI中Drill-down Choropleth 地图
  11. SAEJ3061汽车信息安全指南文档
  12. 国内开源镜像网站列表
  13. 【模块】MAX31865 铂电阻温度检测器模块 RTD传感器PT100-PT1000
  14. 怎样在小方框上打对号 小方框内打对勾 word 方框打对勾
  15. CAD最常用的快捷键大全来啦
  16. Python 第几周和星期几
  17. 关于python中Graphviz画图时报错的解决方法
  18. 如何设计好的RESTful API?
  19. 房地产楼盘三维地图带来的便利
  20. 报错Permission denied: user=root, access=EXECUTE, inode=“/tmp/hadoop-root“解决办法

热门文章

  1. java毕业设计春之梦理发店管理Mybatis+系统+数据库+调试部署
  2. QQ号为什么值钱?QQ号价值评定方法解析
  3. SSOJ 2316 面积【DFS/Flood Fill】
  4. Python模块之pyyaml
  5. Rhino 修剪命令
  6. umy-ui表格如何获取滚动条高度
  7. 读取linux分区工具,Windows XP下直接读取Linux ext4分区文件工具
  8. 三极管和MOS管工作原理详解
  9. 今日头条广告投放的扣费标准是什么?今日头条开屏广告投放指南
  10. Flutter Container、Center设置控件居中背景及其他属性