String[] name={"zzz","aaa","我们","你好","++",};
要求按ascii表顺序排,中文转换成对应的汉语拼音来排,
这样莫非要弄张表记录所有中文对应的拼音吗?
有其他办法吗?

解决方案 »

  1.   

        public static void main(String[] args) { 
            // Collator 类是用来执行区分语言环境的 String 比较的,这里选择使用CHINA 
            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(); 
        } 
      

  2.   

    http://blog.csdn.net/dada9407/archive/2008/09/25/2975622.aspx
    关键字:java,排序,中文,pinyin4j,笔画,GBK,GB2312,拼音,代码点1       问题提出
    汉字排序不同于英文字母的排序,主要有两种排序方式:一种是按拼音首字母排序;一种是按笔画排序。大多数情况下是按拼音首字母排序。那汉字究竟怎样通过其拼音首字母排序呢?好在字符集帮我们解决了这个问题。众所周知的包含汉字的字符集有gb2312和GBK,后者是前者的扩展。Gb2312在设计的时候就将常用的中国汉字按照拼音的顺序包含到字符集中,因此,我们通过汉字的字符编码就可以判断汉字的拼音顺序。因为GBK是gb2312的扩展,对gb2312完全兼容,只是在gb2312的字符集末尾加入了二次常用汉字,所以GBK字符集也可以通过这种方法实现拼音排序。2       问题解决
    Java运行时的编码是Unicode编码,所有的字符集都要转化成Unicode编码,所以,可以很方便的对gb2312和GBK字符集的汉字实现拼音排序。测试代码如下:public class NormalComparator implements Comparator<Object> {     RuleBasedCollator collator = (RuleBasedCollator)Collator.getInstance(Locale.CHINA);     public int compare(Object o1, Object o2) {        // TODO Auto-generated method stub        return collator.compare(o1.toString(), o2.toString());    }}代码说明:Collator 类是执行区分语言环境的 String 比较,可以使用静态工厂方法 getInstance 来为给定的语言环境获得适当的Collator 对象。如Collator.getInstance(Local.CHINA)是获得中国语言的Collator对象。RuleBasedCollator 是Collator的子类,它实现了特定整理策略的细节或者需要修改策略。为了提高效率,对 RuleBasedCollator 做了如下限制(其他子类可以用于更复杂的语言): l             如果指定了由 <modifier> 控制的特殊整理规则,则它将用于整个 collator 对象。 l             所有未指定的字符位于整理顺序的末尾。 整理表由一组整理规则组成,其中每个规则是以下三种形式之一: <modifier><relation> <text-argument><reset> <text-argument>规则元素的定义如下: l            文本参数:文本参数可以是任何的字符序列,不包括特殊字符(即公共空白字符 [0009-000D、0020] 和规则语法字符 [0021-002F、003A-0040、005B-0060、007B-007E])。如果需要使用这些字符,可以把它们放在单引号内(例如 & => '&')。注意,没有使用引号的空白字符将被忽略;例如 b c 视为 bc。 l            修饰符:目前有两个修饰符用于开启特殊的整理规则。     '@' : 开启重音字符的反向排序(二级区别),以法语为例。     '!' : 开启 Thai/Lao 元音-辅音字母交换。如果当 \U0E40-\U0E44 范围内的 Thai 元音字母排在 \U0E01-\U0E2E 范围内的 Thai 辅音字母前面,或者 \U0EC0-\U0EC4 范围内的 Lao 元音字母排在 \U0E81-\U0EAE 范围内的 Lao 辅音字母前面时此规则有效,那么经过整理后元音字母将被放置在辅音字母的后面。 '@' : 指示重音字符按反向排序,以法语为例。 l            关系:关系如下:     '<' : 大于,当字母不同时(一级)     ';' : 大于,当重音不同时(二级)     ',' : 大于,当大小写不同时(三级)     '=' : 等于 l            重置:存在单一的重置主要用于规则集的缩减和扩充,但它也可以用于在规则集的末尾添加修改。 '&' : 指示下一条规则在重置文本参数将要被排序的位置后面。通过RuleBasedCollator类,我们可以对已有的整理规则进行修改,如:String rule = “<a<b<f<g”;String addrule = “&b<e”;本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dada9407/archive/2008/09/25/2975622.aspx