想实现安卓市场这个效果,开始想通过调用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. 透过认知智能剖析商业本质(iPIN CEO杨洋)丨硬创公开课
  2. 使用QueueUserAPC线程注入,
  3. css_oneday
  4. 打牢Python基础,看看这10语法如何
  5. ajax查询功能查询源码,ajax实现分页查询功能
  6. linux菜鸟要飞-根目录
  7. 黑马程序员 Python学习笔记之 注释
  8. 部分计算机会议和期刊论文的下载方法
  9. 基于Internet应用的分销ERP系统源码
  10. 日版(SoftBank, AU) iPhone5回国使用攻略调查
  11. Excel读写工具类
  12. 系统性能优化的十大策略(强烈推荐,建议收藏)
  13. 爬取豆瓣电影Top250影片信息
  14. 如何快速在两个服务器之间传送大文件
  15. Ubuntu20.04的主题美化
  16. 亲缘进程、非亲缘进程-共享内存与信号
  17. 基于FPGA的SRIOIP例程及仿真实现
  18. ARM GUN汇编标准
  19. 王佩丰excel课程笔记
  20. 快递包裹自动化分拣系统_包裹识别系统的类型

热门文章

  1. PHY与网络变压器的连接方式
  2. 基于xposed的某宝插件开发探究
  3. 3155: Preprefix sum
  4. macos支持exfat吗_[启动盘制作]如何在 Windows 下制作苹果 macOS 启动盘
  5. Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
  6. 关于程序语言的蛋生鸡 鸡生蛋问题
  7. 5G远程医疗在抗疫过程中都能做些什么?
  8. python编程学习——第六周
  9. java完全背包,一次性解决三种背包问题
  10. 上海大学计算机学院同等学力申硕,上海大学也能以同等学力申硕的方式报考吗?...