Java字符串按照漢語拼音排序

Java中字符編碼是Unicode,在給漢字字符串排序時,並非咱們指望的按照漢語拼音排序。java

例如,語句System.out.println('龍'>'最')的結果是true,儘管'l'<'z'。app

在網上搜了按照漢語拼音排序的方法,須要下載一個jar包,能夠從這下載:http://sourceforge.net/projects/pinyin4j/files/ui

下載後將其中的pinyin4j-2.5.0.jar加到咱們工程的Build Path編碼

如下代碼來自:http://blog.csdn.net/kennylee26/article/details/3926168spa

import java.util.Comparator;
import net.sourceforge.pinyin4j.PinyinHelper;

public class PinyinComparator implements Comparator<Object> {
    public int compare(Object o1, Object o2) {
        char c1 = ((String) o1).charAt(0);
        char c2 = ((String) o2).charAt(0);
        return concatPinyinStringArray(
                PinyinHelper.toHanyuPinyinStringArray(c1)).compareTo(
                concatPinyinStringArray(PinyinHelper
                        .toHanyuPinyinStringArray(c2)));
    }

    private String concatPinyinStringArray(String[] pinyinArray) {
        StringBuffer pinyinSbf = new StringBuffer();
        if ((pinyinArray != null) && (pinyinArray.length > 0)) {
            for (int i = 0; i < pinyinArray.length; i++) {
                pinyinSbf.append(pinyinArray[i]);
            }
        }
        return pinyinSbf.toString();
    }
}

如下代碼用來顯示某一目錄下的全部文件名稱,是以漢語拼音排序的.net

import java.io.File;
import java.util.Arrays;
import java.util.List;

public class ShowList {
    public static void main(String[] args) {
        new ShowList().showList("F:\\TDDownload");
    }

    public void showList(String dirPath) {
        File dir = new File(dirPath);
        String fileNames[] = dir.list();
        List<String> list = Arrays.asList(fileNames);
        Arrays.sort(fileNames, new PinyinComparator());
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}
這種方法也有不足之處,就是數字會排在符號以前,例如,某一文件名是[開頭,在本身的文件夾下使用文件名排序,它是排在前邊的,可是上面的方法,它卻排在數字後邊。
相關文章
相關標籤/搜索