Android:如何按字母顺序排列特殊字符的Arraylist?

时间:2012-02-24 12:49:51

标签: java android string sorting special-characters

我正在开发一个Android应用程序,其中我有挪威语的数据。现在,我必须按字母顺序对名称列表进行排序,其中名称包含特殊的挪威字符。

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

        public int compare(SetGetMethods object1, SetGetMethods object2) {

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

        }

    };
    Collections.sort(temp, comperator);

我使用上面的代码按字母顺序对列表进行排序。但排序后,顶部显示正常字符的名称和下面显示的带有特殊挪威字符的名称。例如,列表如下所示,

亚伦达 卑尔根 德拉门 Ålesund - &gt; (这应该在Arendal排序之前排在最前面)

所以,我的问题是,如何按字母顺序对列表数据包含特殊字符(挪威字符)的列表进行排序。我将非常感谢您解决问题的任何建议,想法或示例代码。谢谢......

3 个答案:

答案 0 :(得分: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);            
    }
});

答案 1 :(得分:3)

JavaDoc for the RuleBasedCollator class中查看基于挪威语的示例。

基于此,我创建了这个例子,根据重音差异将Å放在A之前 - 注意使用';'在A之前放置\ u00E5所以这适用于您的示例输入,但您需要根据您对语言的了解添加其他重音挪威字符,以完成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);

答案 2 :(得分:1)

使用Collator。这是一种Comparator,它执行区域设置敏感的字符串比较。

在不知道挪威语/字符的情况下,我想你想使用以下代码:

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