不使用pinyin4j, 通过字符串截取手段快速查询通讯录联系人的拼音(包括全拼和简拼)

刚开始我也是使用pinyin4j但是速度太慢8分钟还加载不完我的280个联系人数据,所以我选择另谋出路。发现有个字段包含拼音,“ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY”,就是这个字段,但是是很变态的拼音,比如姓名为“成龙”这个联系人的这个字段的值是”CHENG 成 LONG 龙”注意里面都有空格,而且拼音都为大写,
再比如“liu德华”字段值为”lzizuz DE 德 HUA 华”,非中文后面都会加上”z”,让我很难过,本来想着直接截取的,这样使我的截取方式变得困难。事在人为嘛,看过”最强大脑“明显脑子好用了点,想到了办法。具体请看代码。很简单,有问题再问我

   public static List<contact> getAllContacts(Context context) {List<contact> list = new ArrayList<contact>();ContentResolver resolver = context.getContentResolver();Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER,// 电话号码ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,// 用户名ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY,//ContactsContract.CommonDataKinds.Phone.CONTACT_ID // 联系人id};String selection = null;String[] selectionArgs = null;String sortOrder = ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY;Cursor cursor = null;try {cursor = resolver.query(uri, projection, selection,selectionArgs,sortOrder);if (cursor != null && cursor.getCount() > 0) {while (cursor.moveToNext()) {String number = cursor.getString(0);// 电话号码String name = cursor.getString(1);String sortPinYin = cursor.getString(2);contact object = new contact();String numNoSpace = number.replaceAll(" ","").replaceAll("-","");object.setNumber(numNoSpace);object.setName(name);String[] fullShortPinYin = getFullShortPinYin(name, sortPinYin);object.setFullPinyin(fullShortPinYin[0]);object.setShortpinyin(fullShortPinYin[1]);list.add(object);}}} finally {if (cursor != null) {cursor.close();}}return list;}private static String[] getFullShortPinYin(String name,String sortPinYin) {String [] fullShortPinYin = new String[2];char[] chars = name.toCharArray();StringBuilder fullPin = new StringBuilder();StringBuilder shortPin = new StringBuilder();for (int i = 0; i < chars.length; i++) {String anStr = String.valueOf(chars[i]);if (anStr.matches("[\\u4e00-\\u9fa5]")){String rep = " [A-Z]+ " + anStr + "|" + "\\s*[A-Z]+ " + anStr;Pattern pattern = Pattern.compile(rep);Matcher matcher = pattern.matcher(sortPinYin);if (matcher.find()){String findStr = matcher.group().trim();String resutlStr = findStr.split(" ")[0];fullPin.append(resutlStr);shortPin.append(resutlStr.substring(0,1));}}else {fullPin.append(chars[i]);shortPin.append(chars[i]);}}fullShortPinYin[0] = fullPin.toString().toLowerCase();fullShortPinYin[1] = shortPin.toString().toLowerCase();return fullShortPinYin;}

各位:经过测试,以上方法并不适合所有手机,找到一个通用而且快速的方法。
用tinyPinyin

不使用pinyin4j, 通过字符串截取手段快速查询通讯录联系人的拼音(包括全拼和简拼)相关推荐

  1. mysql 中文截取_中文字符串截取

    java多字节字符串按字节截取 算法思路 1.先按照实际要截取的字节长度,复制一份字节数组 2.转换回字符串,计算字符长度resLen,并按这个长度截取原字符串 3.计算截取的字符串的字节数是否等于需 ...

  2. php取后三字符串,php字符串截取问题

    php字符串截取问题 * @author Chunsheng Wang * @param string $String the string to cut. * @param int $Length ...

  3. 字符串截取固定长度的方法

    这个函数也没有什么特别之处,就是可以截取一定长度的字符串,可能小特点就是len是字节,解决了汉字与英文字节不一样导致直接截取到的长度不一样的问题, #region 字符串截取函数   public s ...

  4. 替换某个字符串_postman教程-10-如何在集合中快速查询和替换数据

    有时候我们常会遇到这样一种问题,系统中有太多的用例,环境变量和系统变量的值也太多,查找其中的某个值太不方便:或者有的值想要修改,但苦于修改的地方太多,修改起来太费劲.那么,针对这样的困扰,是否有办法解 ...

  5. swift中字符串截取方法(substring)

    下面介绍2种swift的字符串截取方法,实际上用到了substringFromIndex,substringToIndex,substringWithRange 1.将String转化为NSStrin ...

  6. 一个效率更高的全半角字符串截取函数

    [原创,转载请注明:[url]http://wfyang.blog.51cto.com[/url]] 现在流传的那几个字符串截取函数,一般都是对字符串进行循环判断,如果要截取的串比较长,效率就成了一个 ...

  7. 字符串截取,对数字,英文,汉字都可以

    同长我们在建站的过程中,都会遇到这样的问题,UTF-8编码格式下英文和汉字占用的字节数不同,导致字符串截取过程中会遇到冲突,使用下面这个函数可以完美的解决这个问题. function cc_msubs ...

  8. shell脚本 8种字符串截取的方法

    来源:http://www.jb51.net/article/56563.htm Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm ...

  9. php 中文 处理,PHP处理中文字符串截取

    截取200个字 mb_substr(strip_tags($content),0,200,'utf-8') strip_tags:剥去字符串中的 HTML 标签 一.中文截取:mb_substr() ...

最新文章

  1. 接口是什么意思_程序员天天用却不懂得冷知识,这两句口诀,让你理解RESTful接口...
  2. [C# 网络编程系列]专题四:自定义Web浏览器
  3. Linux下使用mail命令发送邮件
  4. 微软邮件系统Exchange 2013系列(二)先决条件
  5. 手机modem开发(28)---开发电信VoLTE开关默认值设置
  6. Prometheus 的云上 MySQL 监控实践
  7. 华为7c手机怎么恢复出厂设置_华为手机越用越卡,恢复出厂设置真有用?别乱来,看完就明白了!...
  8. stm32呼吸灯程序_STM32裸机开发基础篇02点亮LED
  9. Flutter之MediaQuery详细分析
  10. vue拦截器刷新登陆页面_vue页面跳转拦截器
  11. 虚拟机设置固定ip,ping不通,xshell无法连接
  12. Linux之镜像源篇
  13. C语言从入门到精通保姆级教程(2021版上)
  14. linux 可道云_阿里云linux+kodexplorer可道云搭建私有云盘-阿里云开发者社区
  15. vue+elementUI实现空格或回车在input内添加小标签的功能
  16. iOS appicon 与 launchImage 尺寸一览
  17. 我是怎么打开车库门的:ASK/OOK手动解码及重放
  18. C/C++要点全掌握(二)——堆栈、指针
  19. 计算机的可持续发展问题,可持续发展视角下的计算机教育优化
  20. 号外丨边缘计算社区品牌升级!

热门文章

  1. Hadoop文章汇总
  2. 一些实用的生活小常识。
  3. 请了婚假,领导还在群里疯狂@我布置工作,怎么办?网友:让他随份子!
  4. CCF认证考试题解目录(持续更新)
  5. U盘安装windows10时显示 windows无法安装到这个磁盘
  6. 网络工程师必修课之ARP MAC欺骗,交换机静态ARP绑定配置
  7. 1.7 给大家介绍一下小红书账号 成长体系的10个等级【玩赚小红书】
  8. 解决ios的https双向认证不能抓包问题
  9. 微信小程序根据经纬度获取省市区信息
  10. conda 安装pytorch