看了下发现确实有问题,看来汉字的字符集扩展的时候对排序考虑的不够周到。goolge下看到sf上有个pinyin4j的项目,虽然有点牛刀,但是可以解决这个问题,pinyin4j的项目地址是: http://pinyin4j.sourceforge.net/
另外javaeye上的zhangljerry 同学,希望你也能看看,因为你的帖子:http://zhangljerry.iteye.com/blog/68333 中,用你的方法排序,"怡"还是会排在最后的。
代码如下:
java 代码
- 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></string> list = Arrays.asList(data);
- Arrays.sort(data, new PinyinComparator());
- System.out.println(list);
- }
- }
结果
java 代码
- [曹, 曾, 昆, 廖, 孟, 宋, 孙, 徐, 怡, 尹, 张, 张, 张]