不使用pinyin4j, 通过字符串截取手段快速查询通讯录联系人的拼音(包括全拼和简拼)
来源:互联网 发布:mac外接显示器如何设置 编辑:程序博客网 时间:2024/04/30 03:32
不使用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
0 0
- 不使用pinyin4j, 通过字符串截取手段快速查询通讯录联系人的拼音(包括全拼和简拼)
- pinyin4j获取汉字正确的全拼和简拼
- pinyin4j获取汉字正确的全拼和简拼(解决多音字问题)
- Android通讯录模糊查询搜索(号码,姓名,首字母简拼,全拼),批量选取联系人
- Android通讯录模糊查询搜索(号码,姓名,首字母简拼,全拼),批量选取联系人
- Android模糊查询(首字母、简拼、全拼,汉字)
- JAVA获取字符串首字拼音和全拼
- 城市查询-拼音、全拼、简拼、混拼、卷舌音、前后鼻音、兼容查询C#与nodejs+redis应用---笔记
- 终结者:借助pinyin4j相关jar包将汉字转换为全拼的拼音
- 使用SAE KVDB快速实现 支持中文/拼音/全拼/的AutoComplete
- js 获取汉字首拼和全拼和拼音
- js 获取汉字首拼和全拼和拼音
- 完整简洁的Oracle获得汉字字符串拼音首字母和全拼的函数
- 获取汉字的全拼和拼音首字母
- 获得汉字拼音的首字母和全拼
- pinyin4j支持简拼和多音
- pinyin4j支持简拼和多音
- 下拉列表支持拼音简拼、全拼、汉字搜索。
- JAVA基本整理
- MySQL主从复制搭建教程
- 变脸式应用 / 进入与退出应用(二)
- 二叉树的基本操作(二)——二叉树的恢复
- 工具类库系列(十三)-ObjectSharedPtrMap2
- 不使用pinyin4j, 通过字符串截取手段快速查询通讯录联系人的拼音(包括全拼和简拼)
- 变脸式应用 / 会话重用与自动登录
- JavaScript函数
- SOUI GDI+渲染引擎下的字体特效,抛砖引玉
- 产品经理告诉你,app开发需要多少钱!
- 二 、 activity启动模式
- html禁止手机页面放大缩小
- 华为OJ<武研所>——素数伴侣
- 申请软件著作权步骤