开发者

Collator doesn't sort right for given Locale

Here's the locale alphabet order: wikipedia

Here's my code:

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.开发者_C百科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);
}

And here's the output:

Austrija

C

Č

Grčka

Slovačka

Slovenija

Španija

Srbija

Švajcarska

Švedska

Đ

As you can see from the link above this is not the correct ordering.

What am I doing wrong?


As I found on your wikipedia page and @Vash his ISO link. I think you mean by "sr" Serbia? Then you will have to choose "cs" as country.

Edit: it depends on the java version you use. Java 6 uses the new iso standard.


I think that the problem could be that there is no country in ISO-3166 with code RS


If the sort order you want is not available, you can create your own order with a RuleBasedCollator. Don't be scared by the documentation of this class. It is as easy as:

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


Just found out it's a known issue caused by political and lingual circumstances. Thanks for help.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜