• Java 中文拼音 排序


    引用:http://blog.csdn.net/machozhao/article/details/1047333

      最近做一个手机数据同步的应用开发,需要提供地址簿信息按照姓名的拼音次序进行排序。但仔细考察Java提供的Collator之后,发现其中文拼音排序存在严重的问题。
    Java提供Collator来支持不同语言的排序问题, 使用方法如下:
    Comparator cmp = (Collator.getInstance(Locale.China));
    cmp,compareTo("爱国", '中国') < 0;
       如果所要比较的中文字符串属于GB一级字库,比较结果正确。但当字符是二级增补字库和GB18030新增的汉字时,无法获得正确的比较结果。例如:***的“*rong”字,姜喆的“喆zhe”字。举例来说,下面的测试使用Java提供的Comparator时失败!
    assertTrue(cmp.compareTo("*", "赵"));
    实际测试结果“*rong”大于“赵zhao”。无法满足应用开发需求!

      为了彻底解决上述问题,从拼音输入法的编码表入手,彻底实现中文的拼音排序问题。*本实现思想如下:
    1. 利用Windows XP提供的WinPY输入法,提取文本格式的汉字和拼音的对照表
    2. 将拼音对照表读入后,使用XML Encode方式进行Serialization, 并存放在Classpath中,共运行Java程序时装载.
    3. 实现Comparator接口,在比较每对中文字符串时,先将其转换为中文的拼音字符串。然后再进行比较,确保获得正确的结果.
    4. 提供ChineseHelper接口及实现类,提供中文字符串*于拼音模式的startWith(char first)方法, 为中文地址簿按照拼音首字母排序提供支持。
    注意:由于中文存在多音字,因此首字判断提供对多音字的支持。例如: "重".startWith('c')和"重".startWith('z')均返回true.

    使用方法:
    1.源程序和Class均压缩在附录部分所提供的Jar包中.
    2.直接将Jar包加入到Classpath中即可使用
    3.由于最近热衷使用JDK 1.5的Generic Type, 因此本软件运行时需要JDK 1.5
    4.比较中文字符串:
    Comparator<Object> comparator = new ChinesePYComparator();
    comparator.compare("**", "中国")

    5. 判断中文拼音的首字符:
        ChineseHelper helper = new ChinesePYComparator();
          assertTrue(helper.startWith("重庆", 'c', true));
          assertTrue(helper.startWith("重庆", 'z', true));

    6. 详细使用方法可以参见源程序:
    com.npower.text.TestChineseHelper, com.npower.text.TestChinesePYComparator, com.npower.text.TestChinesePYConvertor
    上述三个类提供*于Junit的测试用例.

  • 相关阅读:
    Delphi编程 -- 视频捕获avicap32.pas源代码
    Delphi的DataSource事件
    InfoPower4000 wwGrid控件的一些应用技巧
    TwwDBGrid + TwwDBLookupCombo 下拉列表
    Delphi中TwwDBLookupCombo中属性的简单设置
    DevExpress中文说明--TdxCameraControl Object 摄像头组件
    如何Windows分页控件中增加统计功能
    Kibana:运用索引模式的 formatter 来探索 IP 信息
    Alertmanager高可用
    Prometheus高可用部署
  • 原文地址:https://www.cnblogs.com/sode/p/2209674.html
Copyright © 2020-2023  润新知