您的位置:首页 > 编程语言 > Java开发

java中按汉字拼音排序

2008-11-30 21:20 267 查看
看了下发现确实有问题,看来汉字的字符集扩展的时候对排序考虑的不够周到。goolge下看到sf上有个pinyin4j的项目,虽然有点牛刀,但是可以解决这个问题,pinyin4j的项目地址是: http://pinyin4j.sourceforge.net/
另外javaeye上的zhangljerry 同学,希望你也能看看,因为你的帖子:http://zhangljerry.javaeye.com/blog/68333 中,用你的方法排序,"怡"还是会排在最后的。

代码如下:
package com.leondu;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

import net.sourceforge.pinyin4j.PinyinHelper;

public class PinyinComparator implements Comparator {

private String concatPinyinStringArray(String[] pinyinArray) {
StringBuffer pinyinStrBuf = new StringBuffer();

if ((null != pinyinArray) && (pinyinArray.length > 0)) {
for (int i = 0; i < pinyinArray.length; i++) {
pinyinStrBuf.append(pinyinArray[i]);
}
}
String outputString = pinyinStrBuf.toString();
return outputString;
}

public int compare(Object o1, Object o2) {

char c1 = ((String) o1).charAt(0);
char c2 = ((String) o2).charAt(0);
return concatPinyinStringArray(
PinyinHelper.toHanyuPinyinStringArray(c1)).compareTo(
concatPinyinStringArray(PinyinHelper
.toHanyuPinyinStringArray(c2)));
}

public static void main(String[] args) {
String[] data = { "孙", "孟", "宋", "尹", "廖", "张", "张", "张", "徐", "昆",
"曹", "曾", "怡" };

List<String> list = Arrays.asList(data);
Arrays.sort(data, new PinyinComparator());
System.out.println(list);
}

}


结果

[曹, 曾, 昆, 廖, 孟, 宋, 孙, 徐, 怡, 尹, 张, 张, 张]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: