1. 程式人生 > >Collator類詳解(Collections.sort 中文排序)

Collator類詳解(Collections.sort 中文排序)

前言:類 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, 李方, 馬路, 趙飛]

數字排在最前,英文字母其次,漢字則按照拼音進行排序。