由于项目的需要,需要实现中文名称排序的问题,网上找了下,发现这个demo写得非常好:
- /*
- * 实现中文名称的排序问题
- */
- package package1;
- import java.text.Collator;
- import java.util.Arrays;
- import java.util.Comparator;
- public class SortByChinese {
- /**
- * @author luodada
- * @param names
- * @date 2009-06-16
- * @return
- */
- public static String[] getSortOfChinese(String[] names) {
- // 强行对某个对象 collection 进行整体排序 的比较函数
- // Collator 类执行区分语言环境的 String 比较
- Comparator comp = Collator.getInstance(java.util.Locale.CHINA);
- Arrays.sort(names, comp);
- return names;
- }
- /**
- * @author luodada
- * @param args
- * @date 2009-06-16
- */
- public static void main(String[] args) {
- String[] names = {"卡卡", "劳尔", "小小罗", "小罗", "大罗", "里贝里", "梅西", "亨利"};
- SortByChinese.getSortOfChinese(names);
- for (int i = 0 ; i < names.length ; i++) {
- System.out.println(names[i]);
- }
- }
- }
输出结果:
大罗
亨利
卡卡
劳尔
里贝里
梅西
小罗
小小罗
昨晚用上面方法处理了下,由于是需要对List排序,需用到Collections.sort()
import java.text.CollationKey;
import java.text.Collator;
import java.text.RuleBasedCollator;
import java.util.Comparator;
/**
* 中文比较器,按照拼音排序
*/
@SuppressWarnings("unchecked")
public class CnSortComparator implements Comparator {
RuleBasedCollator collator;
public CnSortComparator() {
collator = (RuleBasedCollator) Collator.getInstance(java.util.Locale.CHINA);
}
public int compare(Object obj1, Object obj2) {
String tempname1 = (String) obj1;
String tempname2 = (String) obj2;
CollationKey c1 = collator.getCollationKey(tempname1);
CollationKey c2 = collator.getCollationKey(tempname2);
return collator.compare(((CollationKey) c2).getSourceString(),
((CollationKey) c1).getSourceString());
}
}