Игнорирование диакритических знаков при заказе по алфавиту - PullRequest
5 голосов
/ 01 сентября 2010

Я делаю Java-приложение, которое получает некоторые имена из SQLite и помещает их в список. Дело в том, что я хочу, чтобы он был аккуратно упорядочен по возрастанию в алфавитном порядке (точнее, по-португальски).

Эти записи, например:

Бета Arida Ana

Заказывается как:

Ana Arida Beta

Но так как он упорядочивается в некотором порядке ASCII, «акцентированные» символы будут добавляться в конце, а не прямо под буквой, которой они соответствуют.

Результат: изречений Бета Arida

Как я могу решить это? РЕДАКТИРОВАТЬ: я имел в виду решение проблемы с самой Java, а не с улучшениями SQlite

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 01 сентября 2010

Вы можете сначала прочитать имена в обычный List<String>, а затем использовать Collections.sort() для сортировки списка.Чтобы указать порядок, чувствительный к локали, используйте Collator .

Например:

List<String> names = ... read names from db;
Collator collator = Collator.getInstance(new Locale("pt"));
Collections.sort(names, collator);

Имена будут отсортированы в алфавитном порядке.Возможно, вам понадобится использовать collator.setStrength (SECONDARY), чтобы он «игнорировал» различия из-за акцентов.Поведение зависит от языка, поэтому я не могу сказать наверняка.

2 голосов
/ 01 сентября 2010

Передайте java.text.Collator в вашу процедуру сортировки строк.

...