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)); } } }这种方法也有不足之处,就是数字会排在符号以前,例如,某一文件名是[开头,在本身的文件夹下使用文件名排序,它是排在前边的,可是上面的方法,它却排在数字后边。