怎么将字符以拼音的方式排序,谢谢。

解决方案 »

  1.   


    public class Testx { public static void main(String args[]) {

    List<String> a = new ArrayList<String>(); 

    a.add("在工地在");
    a.add("工地工地");
    a.add("abcdef");
    a.add("中国a");
    a.add("中国");


    Collections.sort(a,new Comparator<String>(){
    public int compare(String o1, String o2) {
    char[] a1 = o1.toCharArray();
    char[] a2 = o2.toCharArray();

    for(int i=0;i<a1.length && i<a2.length;i++){
    int c1 = getGBCode(a1[i]);
    int c2 = getGBCode(a2[i]);

    if(c1 == c2) 
    continue;

    return c1-c2;
    }

    if(a1.length == a2.length){
    return 0;
    }

    return a1.length - a2.length;
    }
    });



    for(String s:a){
    System.out.println(s);
    }

    }


    static int getGBCode(char c){
    byte[] bytes = new StringBuffer().append(c).toString().getBytes();
    if(bytes.length == 1){
    return bytes[0];
    }
    int a = bytes[0]-0xA0+256;
    int b = bytes[1]-0xA0+256;

    return a*100+b;
    }}
      

  2.   

        static int getGBCode(char c){
            byte[] bytes = new StringBuffer().append(c).toString().getBytes();
            if(bytes.length == 1){
                return bytes[0];
            }
            int a = bytes[0]-0xA0+256;
            int b = bytes[1]-0xA0+256;
            
            return a*100+b;
        }这段代码是将 字符转换成 GBCode 吗?(看方法名好象是)
      

  3.   


    import java.util.*;import java.text.*;
    public class Test2 {    public static void testDefault() {       String[] arr = {"张三", "李四", "王五", "刘六"};       Arrays.sort(arr);       for (int i = 0; i < arr.length; i++)         System.out.println(arr[i]);       System.out.println();    }   
        public static void testChinaLocale() {       //Comparator cmp = (RuleBasedCollator)java.text.Collator.getInstance(java.util.Locale.CHINA);//try testing various locales       Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);       String[] arr = {"张三", "李四", "王五", "刘六"};       Arrays.sort(arr, cmp);       for (int i = 0; i < arr.length; i++)         System.out.println(arr[i]);       System.out.println();    }      
        public static void testDefaultLocale() {       //Comparator cmp = (RuleBasedCollator)java.text.Collator.getInstance(java.util.Locale.CHINA);//try testing various locales       Comparator cmp = Collator.getInstance();       String[] arr = {"张三", "李四", "王五", "刘六"};       Arrays.sort(arr, cmp);       for (int i = 0; i < arr.length; i++)         System.out.println(arr[i]);       System.out.println();    }          public static void   main(String args[]) {       testDefault();       testChinaLocale();       testDefaultLocale();    }}
      

  4.   

    Collections.sort(List, new Comparator()
     {
     //排序
      public int compare (Object o1, Object o2) {
      TExpCategory  tcg=(TExpCategory)o1;
      TExpCategory  tcg2=(TExpCategory)o2;
      String categoryName="";
      String categoryName2="";
      try {
     categoryName=new String(tcg.getCategoryName().getBytes("GB2312"),"ISO-8859-1");
     categoryName2=new String(tcg2.getCategoryName().getBytes("GB2312"),"ISO-8859-1");
          } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
          } 
          return categoryName.compareTo(categoryName2);
          }
      })
      

  5.   

    支持 2 楼的说法。有一个地方可以找到拼音码表:
    http://pinyin4j.sourceforge.net/