2014-10-17 58 views
9

有人知道如何使用特殊字符(如重音符)的單詞排列數組嗎?訂購具有特殊字符(例如口音)的數組

Arrays.sort(anArray);

回報'Albacete''Álava'之前,我想'Álava''Albacete'之前。

非常感謝

+1

您必須編寫自己的'比較器'並將其傳遞給'Arrays.sort()'。默認情況下,字符串是基於*自然順序*排序的。 – TheLostMind 2014-10-17 08:13:57

回答

10

如果你只是想好像他們沒有足夠的口音,你可以使用下面的字符串進行排序:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     o1 = Normalizer.normalize(o1, Normalizer.Form.NFD); 
     o2 = Normalizer.normalize(o2, Normalizer.Form.NFD); 
     return o1.compareTo(o2); 
    } 
}); 

相關問題:

對於更復雜的用例,您需要閱讀java.text.Collator。這裏有一個例子:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     Collator usCollator = Collator.getInstance(Locale.US); 
     return usCollator.compare(o1, o2); 
    } 
}); 

如果沒有預定義的排序規則滿足您的需求,您可以嘗試使用java.text.RuleBasedCollator

+0

(請注意,如果您使用的是數組而不是列表,則可以從'Collections.sort'更改爲'Arrays.sort'。) – aioobe 2014-10-17 08:33:24

0

你應該看看RuleBasedCollator

RuleBasedCollat​​or類是Collat​​or的具體子類, 提供了一個簡單的,數據驅動的表collat​​or。通過這個類,您可以創建一個定製的基於表格的Collat​​or。 RuleBasedCollat​​or將 個字符映射到鍵排序。

RuleBasedCollat​​or具有用於效率以下限制(其他子類可以用於更復雜的語言):

如果由所控制的特殊對照規則被指定它 適用於整個配頁對象。在整理順序結束時,所有未提及的字符均爲 。