2012-02-24 101 views
2

我正在開發一個android應用程序,其中我有挪威語言的數據。現在,我必須按字母順序排列名稱列表,其中名稱包含特殊的挪威字符。Android:如何按字母順序排列特殊字符的Arraylist?

Comparator<SetGetMethods> comperator = new Comparator<SetGetMethods>() { 

     public int compare(SetGetMethods object1, SetGetMethods object2) { 

       return object1.getCityname().compareToIgnoreCase(object2.getCityname()); 

     } 

    }; 
    Collections.sort(temp, comperator); 

我用上面的代碼按字母順序對列表進行排序。但排序後,頂部顯示正常字符的名稱和下面顯示的帶有特殊挪威字符的名稱。例如,列表顯示如下圖所示,

亞倫達 卑爾根 德拉門 奧勒鬆 - >(這應該是在上面,亞倫達前分選後)

所以,我的問題是,我怎麼能不大不小的按字母順序列表列表數據包含特殊字符(挪威字符)的位置。我會很感激任何建議,想法或示例代碼來解決問題。謝謝.....

回答

3

看看在JavaDoc for the RuleBasedCollator class基於挪威的例子。基於此,我創建了一個基於重音差異將A置於A之前的示例 - 請注意使用';'將A放在A之前。因此,這適用於您的示例輸入,但您需要根據您的語言知識添加其他重音挪威字符以完成norwegian比較字符串。

String norwegian = "< a, \u00E5;A< b,B< c,C< d,D< e,E< f,F< g,G< h,H< i,I< j,J" + 
                  "< k,K< l,L< m,M< n,N< o,O< p,P< q,Q< r,R< s,S< t,T" + 
                   "< u,U< v,V< w,W< x,X< y,Y< z,Z";                       
RuleBasedCollator myNorwegian = new RuleBasedCollator(norwegian);      
List<String> words = 
    Arrays.asList("Arendal Bergen Drammen \u00E5lesund".split("\\s"));      
System.out.println(words);      
Collections.sort(words, myNorwegian);      
System.out.println(words); 
+0

我我感到困惑,因爲這個課程對我而言是全新的。你能否給我提供一些樣例來理解collat​​or的概念,以及它如何用來對arraylist進行排序。這將是更多的讚賞。 – Junaid 2012-02-24 13:16:35

+0

好的 - 我已經編輯了我的答案來包含它。 – Andy 2012-02-24 13:56:44

+0

好吧,我想用這個示例....非常感謝您的示例...... :) – Junaid 2012-02-24 14:02:29

1

使用Collator。這是一種Comparator,它執行區域設置敏感的字符串比較。

,無需瞭解挪威的語言/文字,我想你想使用下面的代碼:

Collator noCollator = Collator.getInstance(new Locale("no", "NO")); 
noCollator.setStrength(Collator.SECONDARY); 
... 
4

試試這個

的對象

class MyObject 
{ 
    public String name; 
    public int score; 
} 

如果你想(用挪威語在這種情況下)按名稱排序,你可以這樣做

Locale locale = new Locale("nb", "NO"); 
final Collator collator = java.text.Collator.getInstance(locale); 

Collections.sort(your_array, new Comparator<MyObject>() { 
    @Override 
    public int compare(MyObject obj1, MyObject obj2) { 
     return collator.compare(obj1.name, obj2.name);    
    } 
}); 
+0

謝謝!我嘗試使用Collat​​ionKey對象排序對象,但結果完全錯誤。這是按預期工作的。 – Tooroop 2016-06-03 08:39:56

+0

歡迎您! – m4n3k4s 2016-06-03 10:54:09