Collator не сортируется правильно для данной локали - PullRequest
6 голосов
/ 19 ноября 2010

Вот порядок алфавита локали: 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
C
Č
Grčka
Slovačka
Slovenija
Španija
Srbija
Švajcarska
Švedska
Đ

Как видно из ссылки выше, этонеправильный порядок.
Что я делаю не так?

Ответы [ 4 ]

3 голосов
/ 19 ноября 2010

Как я нашел на вашей википедии странице и @Vash его ISO ссылку Я думаю, что вы подразумеваете под "ср" Сербия? Тогда вам нужно будет выбрать "cs" в качестве страны.

Редактировать: это зависит от используемой вами версии Java. В Java 6 используется новый стандарт iso .

1 голос
/ 19 ноября 2010

Я думаю, что проблема может заключаться в том, что в ISO-3166 нет страны с кодом RS

0 голосов
/ 19 ноября 2010

Если требуемый порядок сортировки недоступен, вы можете создать свой собственный заказ с помощью RuleBasedCollator . Не пугайтесь документации этого класса. Это так же просто, как:

String rules = "< a < b < c < ç < d ...";
RuleBasedCollator myRuleBased = new RuleBasedCollator(rules);
Collections.sort(myList, myRuleBased);
0 голосов
/ 19 ноября 2010

Только что узнал, что это известная проблема, вызванная политическими и языковыми обстоятельствами.Спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...