Collator類詳解(Collections.sort 中文排序)
阿新 • • 發佈:2019-02-18
前言:類 Collator
簡介
Collator 類執行區分語言環境的 String 比較。使用此類可為自然語言文字構建搜尋和排序例程。
Collator 是一個抽象基類。其子類實現具體的整理策略。Java 平臺目前提供了 RuleBasedCollator 子類,它適用於很多種語言。還可以建立其他子類,以處理更多的專門需要。
與其他區分語言環境的類一樣,可以使用靜態工廠方法 getInstance 來為給定的語言環境獲得適當的 Collator 物件。如果需要理解特定整理策略的細節或者需要修改策略,只需檢視 Collator 的子類即可。
示例
下面直接上程式碼:
我們例項出一個常見的通訊錄列表,其中包含正常的名稱,還有一些非正常的英文+數字(這種情況是比較常見的):
public static List<String> init() {
List<String> list = new ArrayList<String>();
list.add("李方");
list.add("郭雲2");
list.add("郭雲3");
list.add("趙飛");
list.add("馬路");
list.add("xxx");
list.add("xxy");
list.add("432");
return list;
}
之後我們需要例項化 Collator,並獲取當前語言環境,通過重寫比較器 Comparator來呼叫 Collections.sort() 方法,程式碼如下:
public static void sort() {
List<String> list = init();
Comparator<String> comparator = new Comparator<String>() {
public int compare(String o1, String o2) {
Collator collator = Collator.getInstance();
return collator.getCollationKey(o1). compareTo(
collator.getCollationKey(o2));
}
};
Collections.sort(list, comparator);
System.out.println(list);
}
輸出結果如下:
[432, xxx, xxy, 郭雲2, 郭雲3, 李方, 馬路, 趙飛]
數字排在最前,英文字母其次,漢字則按照拼音進行排序。