Collat​​or不适合给定的Locale

时间:2010-11-19 13:41:10

标签: java sorting internationalization collation

这是区域设置字母顺序:wikipedia
这是我的代码:

public static void main(String[] args) {
    Locale loc = new Locale("sr","RS");

    Collator col = Collator.getInstance(loc);
    col.setStrength(Collator.SECONDARY);

    List<String> slova = new ArrayList<String>();

    slova.add("Austrija");
    slova.add("Slovačka");
    slova.add("Č");
    slova.add("Đ");
    slova.add("C");
    slova.add("Grčka");
    slova.add("Slovenija");
    slova.add("Španija");
    slova.add("Švajcarska");
    slova.add("Švedska");
    slova.add("Srbija");

    Collections.sort(slova,col);

    for(String s: slova)
        System.out.println(s);
}

这是输出:

Austrija
ç
Č
Grčka
Slovačka
斯洛文尼亚
Španija
Srbija的
Švajcarska
Švedska
Đ

从上面的链接可以看出,这不是正确的排序 我做错了什么?

4 个答案:

答案 0 :(得分:3)

正如我在wikipedia页面上找到的那样,@ Vash找到了他的ISO链接。我认为你的意思是“sr”塞尔维亚?然后你必须选择“cs”作为国家。

编辑:这取决于您使用的java版本。 Java 6使用新的iso标准。

答案 1 :(得分:1)

我认为问题可能是ISO-3166中没有代码为RS

的国家/地区

答案 2 :(得分:0)

如果您想要的排序顺序不可用,您可以使用a创建自己的订单 RuleBasedCollator。不要害怕本课程的文档。它很简单:

String rules = "< a < b < c < ç < d ...";
RuleBasedCollator myRuleBased = new RuleBasedCollator(rules);
Collections.sort(myList, myRuleBased);

答案 3 :(得分:-1)

刚刚发现这是一个由政治和语言环境引起的已知问题。谢谢你的帮助。