天天看點

java對于漢字的首字母排序,遇到生僻字時,不要使用Collator.getInstance(java.util.Locale.CHINESE),而要用com.ibm.icu.util.ULocale

1.對于數組的排序方法如下:

String[] names = {"王林",  "楊寶", "李鎮", "劉迪", "劉波"};  

Arrays.sort(names, com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE));//升序;   

System.out.println(Arrays.toString(names));      

2.對于漢字的排序:可以嘗試使用ICU4J會得到更好的結果,特别是姓為某些生僻字的時候,

用com.ibm.icu.text.Collator替換java.text.Collator,用com.ibm.icu.util.ULocale替換java.util.Locale

3.對于枚舉類型的enum1.compareTo(enum2)是按照枚舉類型值在定義時的先後順序比較的,越後面的越大,

而不是按照值的字母先後順序比較的。

比如:List<String> list1 = new ArrayList<String>();

list1.add("網易汽車");

list1.add("新民汽車網");

list1.add("钛媒體");

list1.add("瘾科技");

list1.add("昕薇網");

list1.add("安倍");

list1.add("中國");

list1.add("中心");

System.out.println(list1.toString());

// Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINESE);

com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE);

Collections.sort(list1,

       com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE));

// Collections.sort(list1, new Comparator<String>() {

// @Override

// public int compare(String o1, String o2) {

// return Collator.getInstance(java.util.Locale.CHINA).compare(o1, o2);

// }

// });

System.out.println(list1.toString());

漢子按照中文首字母排序:

用普通的java.util.Locale.CHINESE排序的效果為:

[安倍, 網易汽車, 新民汽車網, 中國, 中心, 昕薇網, 钛媒體, 瘾科技]

用icu的排序效果為:

[安倍, 钛媒體, 網易汽車, 昕薇網, 新民汽車網, 瘾科技, 中國, 中心]

繼續閱讀