java中汉字排序最简明的介绍

Java并不能精确的对所有的汉字进行排序,比如对“犇”和“鑫”进行排序,你就会发现结果又乱了!只是因为我们的汉字文化太博大精深了,要做好这个排序确实有点难为Java了。更深层次的原因是Java使用的是 UNICODE 编码,而中文 UNICODE 字符集是来源于 GB18030 的,GB18030 又是从GB2312 发展起来的, GB2312 是一个包含  7000 多个字符的字符集,它是按照拼音排序,并且是连续的,之后的 GBK、GB2312 都是在起基础上扩充而来的,所以要让它们完整排序也就难上加难了。但如果排序对象是经常使用的汉字,使用Collator类排序完全可以满足我们的要求。


使用默认排序算法的例子:

import java.util.*;
import java.text.*;

public class SortByChinese {
    //测试
    public void sort() {

        String[] a1 = {"保定","何子安","于小云","刘帝","刘何保定子安","刘","刘娜","家强","刘博"};
        getSortOfChinese(a1);
        for (int i = 0; i < a1.length; i++) {
            System.out.println(a1[i]);
        }
    }
    /**
     *
     * @param a String[]
     * @return String[]
     */
    public String[] getSortOfChinese(String[] a) {
        // Collator 类是用来执行区分语言环境这里使用CHINA
        Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);

        // JDKz自带对数组进行排序。
        Arrays.sort(a, cmp);
        return a;
    }
}



如果需要严格排序,可以使用一些开源项目来自己实现,比如 pinyin4j 可以把汉字转换为拼音,然后我们自己来实现排序算法,不过此时你也会发现要考虑诸如算法、同音字、多音字等众多问题。

        pinyin4j下载地址:http://pinyin4j.sourceforge.net/




文章参考:《编写高质量代码:改善Java程序的151个建议》的建议59。


你可能感兴趣的:(JAVA)