因为linux没有gb2312字符集,所以你调用getBytes()就会有异常的。其实你这个排序是没有什么意义的,因为这个排序是按照字符编码的16进制数大小来排的,对于中文来说没有意义。这样还不如直接使用unicode的大小来排呢!

解决方案 »

  1.   

    纠正一下
    你的这个排序是按照byte位数来排的,真不明白为什么这么排,真没什么意义补充一下
    你的语句应该都是执行到这里面了
    catch (UnsupportedEncodingException ex) {
    return 0;
    }
      

  2.   

    to  jFresH_MaN(TM)
    我是想按照中文音序排列
    在linux下面并没有报错
    并且还能把转换成字节数组的长度打印出来呢,只是两种环境下长度不同
    windows下面:
    北京 length=4    中国 length=4
    buf1[0]=-79       buf2[0]=-42
    中国 length=4    亚运会 length=6
    buf1[0]=-42       buf2[0]=-47
    北京 length=4    亚运会 length=6
    buf1[0]=-79       buf2[0]=-47linux下面:
    北京 length=6    中国 length=5
    buf1[0]=-95       buf2[0]=63
    中国 length=5    亚运会 length=7
    buf1[0]=63       buf2[0]=63
    buf1[1]=63       buf2[1]=63
    buf1[2]=63       buf2[2]=63
    buf1[3]=-88       buf2[3]=63
      

  3.   

    谢谢大家的支持,我已经解决了
    public class SortComparator implements Comparator{
        public int compare(Object o1,Object o2) {
            try{
                    byte[] buf1 = ((String) o1).getBytes("unicode");
                    byte[] buf2 = ((String) o2).getBytes("unicode");
                    int size = Math.min(buf1.length, buf2.length);
                    for (int i = 0; i < size; i++) {
                        if (buf1[i] < buf2[i])
                            return -1;
                        else if (buf1[i] > buf2[i])
                            return 1;
                    }
                    return buf1.length - buf2.length;
                }catch(UnsupportedEncodingException ex) {
                    return 0;
                }
        }
    }调用:
    String[] str = {"北京","中国","亚运会"};
    Arrays.sort(str,new SortComparator());