我收集了一些网友的解答,请点击链接查看:

1  2

建议看2。

第二个链接中的例子如下:

 
  
  1. package comparatorTest;  
  2.  
  3. import java.util.Comparator;  
  4. import net.sourceforge.pinyin4j.PinyinHelper;   
  5.  
  6. public class PinyinComparator implements Comparator<String> {   
  7.  
  8.    public int compare(String o1, String o2) {   
  9.  
  10.        for (int i = 0; i < o1.length() && i < o2.length(); i++) {   
  11.  
  12.            int codePoint1 = o1.charAt(i);  
  13.             int codePoint2 = o2.charAt(i);   
  14.  
  15.            if (Character.isSupplementaryCodePoint(codePoint1)  
  16.                     || Character.isSupplementaryCodePoint(codePoint2)) {  
  17.                 i++;  
  18.             }   
  19.  
  20.            if (codePoint1 != codePoint2) {  
  21.                 if (Character.isSupplementaryCodePoint(codePoint1)  
  22.                         || Character.isSupplementaryCodePoint(codePoint2)) {  
  23.                     return codePoint1 - codePoint2;  
  24.                 }   
  25.  
  26.                String pinyin1 = pinyin((char) codePoint1);  
  27.                 String pinyin2 = pinyin((char) codePoint2);   
  28.  
  29.                if (pinyin1 != null && pinyin2 != null) { // 两个字符都是汉字  
  30.                     if (!pinyin1.equals(pinyin2)) {  
  31.                         return pinyin1.compareTo(pinyin2);  
  32.                     }  
  33.                 } else {  
  34.                     return codePoint1 - codePoint2;  
  35.                 }  
  36.             }  
  37.         }  
  38.         return o1.length() - o2.length();  
  39.     }   
  40.  
  41.    /**  
  42.      * 字符的拼音,多音字就得到第一个拼音。不是汉字,就return null。  
  43.      */ 
  44.     private String pinyin(char c) {  
  45.         String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);  
  46.         if (pinyins == null) {  
  47.             return null;  
  48.         }  
  49.         return pinyins[0];  
  50.     }  
  51.     public static void main(String[] args) {  
  52.         Comparator<String> comparator = new PinyinComparator();   
  53.         System.out.println(comparator.compare("孟""宋"));  
  54.         System.out.println(comparator.compare("他奶奶的""他奶奶的熊"));  
  55.         System.out.println(comparator.compare("a""阿"));  
  56.         System.out.println(comparator.compare("1""阿") );  
  57.         System.out.println(comparator.compare("怡""张") );  
  58.         System.out.println(comparator.compare("怕""帕") );  
  59.         System.out.println(comparator.compare("曾经""曾迪") );  
  60.     }  
  61. }  
  62.  

结果为:

-6
-1
-38366
-38414
-1
0
6