想实现安卓市场这个效果,开始想通过调用android的本地化功能实现:

[java] view plaincopyprint?
  1. omparator cmp = Collator.getInstance(java.util.Locale.CHINA);
  2. Arrays.sort(names, cmp);

这个可以实现简单的汉字排序功能,按 汉字拼音的第一个字母的英文字母顺序排序,这个真正用起来不太灵活,特别是对比较的不是集合对象本身,而是集合对象的一个字段的情况下,这种方法就比较麻烦了,于是重写类实现 Comparator接口

[java] view plaincopyprint?
  1. public class CollatorComparator implements Comparator {
  2. Collator collator = Collator.getInstance();
  3. public int compare(Object element1, Object element2) {
  4. CollationKey key1 = collator
  5. .getCollationKey(((AppInfo) element1).appName);
  6. CollationKey key2 = collator
  7. .getCollationKey(((AppInfo) element2).appName);
  8. return key1.compareTo(key2);
  9. }
  10. }

通过:

[java] view plaincopyprint?
  1. List<AppInfo> Softpacks = new ArrayList<AppInfo>();
  2. Collections.sort(Softpacks, new CollatorComparator());

实现以AppInfo类的appName对象作为排序字段,这样使用起来就比较灵活了。可以顺利实现汉字的排序。

这时想实现在显示的item上按 A,B,C分隔开显示,这时就要找出汉字的拼音 或者 拼音的第一个字母,查找下网上的资料,有这个相关的第三方jar包 ,pinyin4j-2.5.0.jar

下载过来 :

[java] view plaincopyprint?
  1. import net.sourceforge.pinyin4j.PinyinHelper;
  2. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  3. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  4. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  5. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  6. /**
  7. * 汉字转换位汉语拼音,英文字符不变
  8. * @author xuke
  9. *
  10. */
  11. public class Cn2Spell {
  12. /**
  13. * 汉字转换位汉语拼音首字母,英文字符不变
  14. * @param chines 汉字
  15. * @return 拼音
  16. */
  17. public static String converterToFirstSpell(String chines){
  18. String pinyinName = "";
  19. char[] nameChar = chines.toCharArray();
  20. HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  21. defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  22. defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  23. for (int i = 0; i < nameChar.length; i++) {
  24. if (nameChar[i] > 128) {
  25. try {
  26. pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
  27. } catch (BadHanyuPinyinOutputFormatCombination e) {
  28. e.printStackTrace();
  29. }
  30. }else{
  31. pinyinName += nameChar[i];
  32. }
  33. }
  34. return pinyinName;
  35. }
  36. /**
  37. * 汉字转换位汉语拼音,英文字符不变
  38. * @param chines 汉字
  39. * @return 拼音
  40. */
  41. public static String converterToSpell(String chines){
  42. String pinyinName = "";
  43. char[] nameChar = chines.toCharArray();
  44. HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  45. defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  46. defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  47. for (int i = 0; i < nameChar.length; i++) {
  48. if (nameChar[i] > 128) {
  49. try {
  50. pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0];
  51. } catch (BadHanyuPinyinOutputFormatCombination e) {
  52. e.printStackTrace();
  53. }
  54. }else{
  55. pinyinName += nameChar[i];
  56. }
  57. }
  58. return pinyinName;
  59. }
  60. }

通过调用converterToFirstSpell(String chines)方法,获得汉字拼音的首字母,顺利实现上述功能  

虽然可以顺利实现,但是通过引用第三方jar包,在android里也算是重量级实现了,于是想能不能不通过第三方pinyin4j-2.5.0.jar包实现这个功能

通过网上搜寻,发现android2.2版本以后,数据库里有汉字联系人时,也有一个字段是存储汉字拼音的,也就是说 当你保存中文姓名联系人时,系统会调用一个方法把中文联系人转成拼音存储起来 ,于是想能不能找到系统调用的这个方法,通过这个方法实现汉字转换拼音的功能。网上看了下 有人已经追踪过此方面的源码:地址。

http://blog.csdn.net/csuhanyong/article/details/6120935

有时间在追踪下,先记录到这。

android 用拼音对汉字排序相关推荐

  1. java 汉字拼音排序_Java汉字排序(2)按拼音排序

    1.前言 对于包含汉字的字符串来说,排序的方式主要有两种: 一种是拼音,一种是笔画. 本文就讲述如何实现按拼音排序的比较器(Comparator). 作者:Jeff 发表于:2007年12月21日 1 ...

  2. python 列表根据汉字拼音进行排序 / 查询结果集(列表嵌套字典)根据特定key字段拼音进行整体排序

    基于 pypinyin 的拼音首字排序 * 以下方法皆只根据词语的第一个汉字进行排序 1.基于列表 进行排序 from pypinyin import lazy_pinyindef pinyin_so ...

  3. iOS searchbar实现汉字更具拼音首字母排序

    最近在做一个地图相关的应用,涉及到全国城市的切换,于是打算把这个记录下来 用到的主要东西有:百度的全国城市列表,txt格式,jasonkit数据解析第三方,tableview,searchabar,汉 ...

  4. GB2312-80 所有汉字排序,拼音

    须知:所有这些汉字都是GB2312-80标准中说明的汉字. 下面的这些规则不一定适用其它标准中的汉字范围. // 各声母的汉字界限. 这是经过将GB2312-80标准中的所有汉字排序后,获取拼音后提取 ...

  5. android 获取拼音首字母,Android开发 - 汉字转拼音首字母

    概述 工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路: 1.获得汉字 2.将汉字转换成首字母,并记录下(必要时保存到数据库) 3.按首字母进行 ...

  6. Collections.sort实现倒序汉字拼音排序,默认是按照正序进行汉字拼音排序MYSQL语句支持汉字排序SQL汉字排序

    前言: 需求上遇到过,业务希望一些下拉框,按照汉字拼音的顺序来进行展示,需要对下拉框的List进行排序. 特别注意: Collections.reverse()方法是将数据倒置,并非倒序直接排序. 倒 ...

  7. //汉字转拼音,比较排序时候用

    //汉字转拼音,比较排序时候用 NSMutableString *ms = [[NSMutableStringalloc] initWithString:car.name]; if (CFString ...

  8. 数据库按照汉字拼音首字母排序

    ===>sqlserver按照汉字拼音首字母排序 select * from table order by name collate Chinese_PRC_CS_AS_KS_WS 在修改sql ...

  9. 汉字按拼音首字母排序

    按拼音首字母排序 localeCompare() 方法返回一个数字来指示一个参考字符串是否在排序顺序前面或之后或与给定字符串相同. 返回一个数字表示是否 引用字符串 在排序中位于 比较字符串 的前面, ...

最新文章

  1. html按钮线性炫光,6分钟实现CSS炫光倒影按钮 html+css
  2. 有了图分析,可解释的AI还远吗?
  3. Janusec应用安全网关(WAF网关)
  4. Neighbor-Vote:使用邻近距离投票优化单目3D目标检测(ACM MM2021)
  5. try-catch-finally中return的执行情况
  6. wxwidgets mysql_Ubuntu下wxWidgets学生公寓管理编程,sqlite3的用法(mysql数据_MySQL
  7. 【Python基础】Python 100 例带你入门
  8. 计算机一级access考试题库,‎App Store 上的“计算机二级access-全国计算机等级考试题库”...
  9. VTK:vtkAxisActor用法实战
  10. HttpURLConnection总结
  11. VMware下安装CentOS7 无法通过桥接模式进行联网
  12. ASP.NET2.0数据操作之创建业务逻辑层
  13. 离开小米后 周受资将加入字节跳动担任CFO
  14. 【kafka】kafka topic Dump log
  15. Nginx+Redis 搭建高性能缓存利器
  16. Java 中的接口有什么作用?为什么不直接用类?
  17. html管道符需要转义么,为什么String.split需要管道分隔符进行转义?
  18. 数据结构与算法(python版)
  19. 主成分分析结果成分不显著_主成分分析结果
  20. 使用CMD打开证书管理实用程序

热门文章

  1. 盘点5款数据可视化分析报表工具
  2. 软件工程--团队作业3
  3. Flash 命令大全
  4. The device ‘/dev/sdd1‘ doesn‘t seem to have a valid NTFS
  5. Random Forest(随机森林)在软件缺陷预测领域的应用及其特点
  6. C#简单小游戏之贪吃蛇
  7. 公路、铁路工程项目一体化管理智慧工地云平台
  8. POS终端“密事”之签到
  9. 数据结构与算法 -判定树和哈夫曼树
  10. 怎么抓取网上的音频呢?我来操作下嘿嘿...