Java Collator不';对于给定的区域设置,不能正确排序

Java Collator不';对于给定的区域设置,不能正确排序,java,sorting,internationalization,collation,Java,Sorting,Internationalization,Collation,以下是区域设置字母顺序: 这是我的密码: 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>(

以下是区域设置字母顺序:
这是我的密码:

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);
}
publicstaticvoidmain(字符串[]args){
语言环境loc=新语言环境(“sr”、“RS”);
Collator col=Collator.getInstance(loc);
col.setStrength(Collator.SECONDARY);
List slova=new ArrayList();
斯洛文尼亚。添加(“澳大利亚”);
slova.添加(“slovačka”);
斯洛文尼亚。添加(“Č”);
斯洛文尼亚。添加(“Đ”);
a.添加(“C”);
斯洛文尼亚。添加(“Grčka”);
斯洛文尼亚。添加(“斯洛文尼亚”);
斯洛伐克语。添加(“什帕尼贾”);
斯洛文尼亚加上(“什瓦卡”);
斯洛伐克语。添加(“什维茨卡”);
斯洛伐克。添加(“斯比亚”);
Collections.sort(slova,col);
for(字符串s:slova)
系统输出打印项次;
}
以下是输出:

澳大利亚
C
Č
Grčka
斯洛瓦卡
斯洛文尼亚
Španija
斯比亚
Švajcarska
什维茨卡
Đ

从上面的链接可以看出,这不是正确的顺序。

我做错了什么?

我想问题可能是,没有一个国家的代码是RS

,正如我在你的页面和@Vash他的链接中发现的那样。我想你指的是“sr”塞尔维亚?然后你必须选择“cs”作为国家


编辑:这取决于您使用的java版本。Java6使用了新标准。

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

如果您想要的排序顺序不可用,您可以使用 . 不要害怕这个类的文档。这很容易:

String rules = "< a < b < c < ç < d ...";
RuleBasedCollator myRuleBased = new RuleBasedCollator(rules);
Collections.sort(myList, myRuleBased);
String rules=“
以S和Š开头的单词是混合的,不应该在结尾。假设每个人都能看到输出是错误的,这是非常夸张的。这就是为什么我在顶部添加了字母顺序链接,并添加了注释指出输出的错误之处。当我在Collator上调用getAvailableLocales()时,我会得到一系列的sr_RS。Vash的链接指向过时的iso代码。我已经检查了支持的区域设置,Collator确实支持sr_RS和遗留sr_CS。使用sr_CS返回相同的输出。ISO-3166不能根据定义过时。这个链接来自Java文档,它并不能完全解决我的问题,因为我需要根据大量动态获取的区域设置进行排序,这意味着我必须定义一个包含40多种不同语言的规则。即使我愿意写这样的怪兽,维护它也会是更糟糕的噩梦。我选择了用类似的语言环境替换“sr”。我对此不太确定。排序规则由各种Unicode标准(Unicode.org)版本捕获。当前的标准版本(6.0)可能对塞尔维亚有正确的排序规则,但Java实现了一些以前的快照。请看一下ICU的实施情况:看看它是否按正确的方式分类。