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)); } } }這種方法也有不足之處,就是數字會排在符號以前,例如,某一文件名是[開頭,在本身的文件夾下使用文件名排序,它是排在前邊的,可是上面的方法,它卻排在數字後邊。