`
leondu
  • 浏览: 114513 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java中实现汉语拼音排序

    博客分类:
  • java
阅读更多

看了下发现确实有问题,看来汉字的字符集扩展的时候对排序考虑的不够周到。goolge下看到sf上有个pinyin4j的项目,虽然有点牛刀,但是可以解决这个问题,pinyin4j的项目地址是: http://pinyin4j.sourceforge.net/

另外javaeye上的zhangljerry 同学,希望你也能看看,因为你的帖子:http://zhangljerry.iteye.com/blog/68333 中,用你的方法排序,"怡"还是会排在最后的。

代码如下: 

java 代码
  1. package com.leondu;   
  2.   
  3. import java.util.Arrays;   
  4. import java.util.Comparator;   
  5. import java.util.List;   
  6.   
  7. import net.sourceforge.pinyin4j.PinyinHelper;   
  8.   
  9. public class PinyinComparator implements Comparator {   
  10.   
  11.     private String concatPinyinStringArray(String[] pinyinArray) {   
  12.         StringBuffer pinyinStrBuf = new StringBuffer();   
  13.   
  14.         if ((null != pinyinArray) && (pinyinArray.length > 0)) {   
  15.             for (int i = 0; i < pinyinArray.length; i++) {   
  16.                 pinyinStrBuf.append(pinyinArray[i]);   
  17.             }   
  18.         }   
  19.         String outputString = pinyinStrBuf.toString();   
  20.         return outputString;   
  21.     }   
  22.   
  23.     public int compare(Object o1, Object o2) {   
  24.   
  25.         char c1 = ((String) o1).charAt(0);   
  26.         char c2 = ((String) o2).charAt(0);   
  27.         return concatPinyinStringArray(   
  28.                 PinyinHelper.toHanyuPinyinStringArray(c1)).compareTo(   
  29.                 concatPinyinStringArray(PinyinHelper   
  30.                         .toHanyuPinyinStringArray(c2)));   
  31.     }   
  32.   
  33.     public static void main(String[] args) {   
  34.         String[] data = { "孙""孟""宋""尹""廖""张""张""张""徐""昆",   
  35.                 "曹""曾""怡" };   
  36.   
  37.         List<string></string> list = Arrays.asList(data);   
  38.         Arrays.sort(data, new PinyinComparator());   
  39.         System.out.println(list);   
  40.     }   
  41.   
  42. }   

结果

java 代码
  1. [曹, 曾, 昆, 廖, 孟, 宋, 孙, 徐, 怡, 尹, 张, 张, 张]   
分享到:
评论
4 楼 leondu 2007-08-07  
@spiritfrog & talangniao
sorry,我也只是用到了pinyin4j的一点点功能。
具体用法还是请到http://pinyin4j.sourceforge.net/ 查下doc,我印象中至少talangniao 的问题是可以解决的
3 楼 talangniao 2007-08-06  
我想人名要是很多:
我想分:
A:啊,阿..
B:波,伯...
C:迟,吃..
这样能实现吗?
怎样实现呢?
2 楼 spiritfrog 2007-06-07  
其实汉语拼音只要按照首字首字母或者逐个字的首字母排序就好了,一般不会完整的去比较的.
1 楼 spiritfrog 2007-06-07  
挺有意思的东西, 如果是多音字的话,哪个拼音应该排在前面呢?

相关推荐

    Java编程实现中英混合字符串数组按首字母排序的方法

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...

    Java名字获取拼音

    "Java名字获取拼音"这个主题就是关于如何在Java中实现这一功能。这里我们将深入探讨如何利用开源库pinyin4j来完成汉字到拼音的转换,并提供一个完整的使用示例。 pinyin4j是一个强大的Java库,专门用于处理汉字和...

    中文转换为拼音java

    这些库通常会基于Unicode字符集的汉语拼音映射关系进行转换。 1. **Pinyin4j库**: Pinyin4j是一个Java库,用于处理中文字符和拼音之间的转换。它能够处理多音字,并提供声调标记的选项。使用Pinyin4j,你可以如下...

    java 取汉字拼音工具包

    2. **声调处理**:汉语拼音有四个声调,工具包应能正确识别并处理这些声调。在某些情况下,声调可能被忽略,只保留不带声调的基本拼音。 3. **多音字处理**:许多汉字有不同的读音,这取决于它们在句子中的上下文。...

    Android 中英文混合排序

    在"Android 中英文混合排序"这个主题中,我们需要理解如何利用Java(Android的主要编程语言)中的排序机制,结合中文转拼音的方法,来实现这一功能。下面我们将详细探讨这一过程。 首先,Android系统基于Java虚拟机...

    Java汉字转成汉语拼音工具类

    总结来说,这个Java汉字转成汉语拼音工具类为处理中文提供了极大的便利,通过合理利用pinyin4j库,可以有效地实现汉字到拼音的转换,并且支持多种格式和大小写的变化。在实际开发中,可以将这个工具类作为基础组件,...

    中文首字母排序java代码

    根据提供的信息,我们可以了解到这段Java代码的主要目的是将中文字符转换为对应的汉语拼音首字母。这种方法在处理中文排序、检索等场景时非常有用。下面将详细解释该代码的工作原理及其应用场景。 ### 代码逻辑分析...

    基于java的中文转拼音库 pinyin4j.zip

    Pinyin4j是由Barry DeZeng开发的一个Java库,它能够将汉字转换为对应的汉语拼音,支持声调标注,同时也可以处理多音字问题。这个库的设计简洁且高效,使得开发者能够方便地在Java项目中集成中文转拼音的功能。 二、...

    java汉字转拼音代码+多音字词汇表

    在某些应用场景中,我们可能只需要汉字的首字母,如搜索引擎关键词的简写或者拼音排序。工具类可能会有一个方法,可以快速地将汉字转换为首字母形式,如汉字"中国"转换为"Zh"。 4. **性能优化**: 能够处理上万个...

    中文姓名转换为拼音jar包

    标题提到的"中文姓名转换为拼音jar包"是一个Java应用程序,它提供了将中文字符转化为对应的汉语拼音的功能。这个jar包可能包含了一个或多个类库,用于高效地实现这一转换过程。 首先,我们要理解汉语拼音的基本概念...

    java汉字与拼音的转换

    7. **实际应用**:Pinyin4j在许多实际场景中有广泛应用,如关键词提取、关键词搜索、拼音排序、拼音输入法等。 总之,Java中的汉字与拼音转换,尤其是多音字处理,可以借助Pinyin4j库高效实现。理解并掌握其基本...

    汉字转换成拼音的java类库

    在Java编程环境中,有时我们需要将汉字转换为拼音,以便进行各种文本处理操作,例如搜索、排序或生成语音。"汉字转换成拼音的java类库"就是为此目的设计的一个工具,它提供了一种方便的方式来实现这一功能。这个类库...

    displaytag中文排序问题解决办法

    Java中的`String`对象在进行比较时,默认是基于Unicode的字典顺序,这可能导致中文字符按照其Unicode值而非汉语拼音或笔画顺序排序。对于中文来说,我们通常期望按照汉字的拼音或笔画来排序,而不是Unicode值。 ...

    汉字转拼音jar包_pinyin4j(java)

    在实际应用中,`pinyin4j`可以用于各种场景,比如关键词提取、拼音排序、模糊搜索、拼音首字母快速导航等。这个库因其易用性和强大的功能,在Java和Android开发者中得到了广泛应用。 通过以上介绍,你应该对`pinyin...

    PB 读取汉语拼音的首字母(源码),用处很大

    标题中的“PB 读取汉语拼音的首字母”指的是在PowerBuilder(PB)环境中实现一个功能,该功能能够从汉字中提取出汉语拼音的首字母。这个功能在处理中文数据时非常有用,尤其是在进行关键词搜索、拼音排序或者构建...

    java 获取拼音源文件

    在Java编程语言中,获取汉字的拼音是一项常见的需求,特别是在处理中文文本的搜索、排序或者信息提取时。本文将深入探讨如何使用Java来获取汉字的拼音,并基于提供的压缩包文件"PinYin"来解析其内容,理解源代码实现...

    取拼音首字母,第三方

    这些库能够将中文字符转换为对应的汉语拼音,然后我们从中提取首字母。 以Python的`pypinyin`库为例,使用该库可以这样实现取拼音首字母的功能: ```python from pypinyin import pinyin, lazy_pinyin, Style def...

    java汉字转拼音字头-代码类(通用版)

    在`PinYin`类中,通过静态数组`keys`存储了所有汉语拼音的基本单位,这些基本单位涵盖了汉语拼音的所有声母和韵母组合。当需要将汉字转换为拼音时,程序会利用某种方式(如第三方库或自定义算法)将汉字映射到相应的...

    安卓Android源码——带有拼音首字母排序的listview.zip

    首先,拼音首字母排序是为了解决中文姓名或词汇按汉语拼音的首字母顺序排列的问题。在Android系统中,由于默认的排序方式是基于Unicode编码,不适用于中文字符,因此需要自定义排序逻辑。这个源码示例可能会展示如何...

    android根据字母排序的城市列表

    为了实现字母排序,我们需要对城市名称进行预处理,按照汉语拼音的首字母进行排序。 1. **数据结构与排序**: - 数据存储:城市数据通常存储在数据库(如SQLite)或JSON文件中,每个城市包含名称等属性。我们需要...

Global site tag (gtag.js) - Google Analytics