2012-02-24 80 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