Android: как отсортировать список специальных символов в алфавитном порядке? - PullRequest
2 голосов
/ 24 февраля 2012

Я занимаюсь разработкой приложения для Android, в котором у меня есть данные на норвежском языке.Теперь я должен отсортировать список имен в алфавитном порядке, где имена содержат специальные норвежские символы.

    Comparator<SetGetMethods> comperator = new Comparator<SetGetMethods>() {

        public int compare(SetGetMethods object1, SetGetMethods object2) {

                return object1.getCityname().compareToIgnoreCase(object2.getCityname());

        }

    };
    Collections.sort(temp, comperator);

Я использовал приведенный выше код для сортировки списка по алфавиту.Но после сортировки имена с нормальными символами отображаются сверху, а имена с особыми норвежскими символами отображаются под ними.Например, список показан ниже:

Арендал Берген Драммен Олесунн -> (Это должно быть сверху, перед Арендалом после сортировки)

Итак, мой вопрос, как я могу отсортироватьсписок в алфавитном порядке, где данные списка содержат специальные символы (норвежские символы).Я буду признателен за любые предложения, идеи или примеры кода для решения проблемы.Спасибо .....

Ответы [ 3 ]

4 голосов
/ 16 июля 2012

Попробуйте это

Для объекта

class MyObject
{
  public String name;
  public int score;
}

Если вы хотите сделать заказ по имени (в данном случае с использованием норвежского языка), вы можете сделать это

Locale locale = new Locale("nb", "NO");
final Collator collator = java.text.Collator.getInstance(locale);

Collections.sort(your_array, new Comparator<MyObject>() {
    @Override
    public int compare(MyObject obj1, MyObject obj2) {
        return collator.compare(obj1.name, obj2.name);            
    }
});
3 голосов
/ 24 февраля 2012

Посмотрите на пример на норвежском языке в JavaDoc для класса RuleBasedCollator .

Исходя из этого, я создал этот пример, который ставит Å перед А на основе разницы в акцентах - обратите внимание на использование ';' поставить \ u00E5 перед A. Так что это работает для вашего примера ввода, но вам нужно добавить другие символы с нормированным акцентом на основе вашего знания языка, чтобы завершить строку сравнения norwegian.

String norwegian = "< a, \u00E5;A< b,B< c,C< d,D< e,E< f,F< g,G< h,H< i,I< j,J" +
                   "< k,K< l,L< m,M< n,N< o,O< p,P< q,Q< r,R< s,S< t,T" +
                   "< u,U< v,V< w,W< x,X< y,Y< z,Z";                      
RuleBasedCollator myNorwegian = new RuleBasedCollator(norwegian);     
List<String> words = 
  Arrays.asList("Arendal Bergen Drammen \u00E5lesund".split("\\s"));     
System.out.println(words);     
Collections.sort(words, myNorwegian);     
System.out.println(words);
1 голос
/ 24 февраля 2012

Используйте Collator .Это тип Comparator , который выполняет сравнение строк с учетом локали.

Не зная о норвежском языке / символах, я думаю, вы захотите использовать следующий код:

Collator noCollator = Collator.getInstance(new Locale("no", "NO"));
noCollator.setStrength(Collator.SECONDARY);
...
...