Коллекции сортировки

66
4

При сортировке некоторых данных в JTable я столкнулся с проблемой, когда в JTable присутствуют некоторые немецкие языки.

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

Код:

Vector<String> vec = new Vector<String>();

vec.add("ba~~~");
vec.add("ba~ab~~");
vec.add("ÇÊÕÝ");
vec.add("ÇÊÕÝ~ÂÉĒÐ~~");

System.out.println("Unsorted: "+vec);
Collections.sort(vec);
System.out.println("Sorted: "+vec);

Выход: Unsorted: [ba ~~~, ba ~ ab ~~, ÇÊÕÝ, ÇÊÕÝ ~ ÂÉĒÐ ~~]
Сортировано: [ba ~ ab ~~, ba ~~~, ÇÊÕÝ, ÇÊÕÝ ~ ÂÉĒÐ ~~]

Результат, который мне нужен: Unsorted: [ba ~~~, ba ~ ab ~~, ÇÊÕÝ, ÇÊÕÝ ~ ÂÉĒÐ ~~]
Сортировано: [ba ~ ab ~~, ba ~~~, ÇÊÕÝ ~ ÂÉĒÐ ~~, ÇÊÕÝ]

Из вывода я вижу, что строка "ba ~ ab ~~" предшествует "ba ~~~", которая корректно лексикографически. Но я не мог понять, почему "ÇÊÕÝ ~ ÂÉĒÐ ~~" приходит после "ÇÊÕÝ". Мое требование - получить желаемый результат (как я уже упоминал выше), чтобы мое приложение работало правильно.

Я пропускаю все, что мне нужно предоставить, сравнивая специальные языки.

Любая полезная помощь очень ценится.

спросил(а) 2020-04-04T02:14:18+03:00 3 месяца назад
1
Решение
78

Либо вы можете использовать встроенные Collator.getInstance(Locale.XXX) (Collator.getInstance(Locale.XXX)) и реализовать compareTo, или если это не встроенная сортировка, вам нужно будет создать свой собственный, используя RuleBasedCollator а затем отсортировать. Подробнее о коллайсере на основе правил: http://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html

ответил(а) 2020-04-04T02:33:41.038367+03:00 3 месяца назад
39

Большое спасибо сэр... @Акбер Чоудри... В конечном итоге я обнаружил, что характер (~ наклона) является главным виновником. Для сравнения этого набора Если я использую расширенный символ ASCII 'ÿ' с максимальным значением ASCII 255, он решает проблему как шарм.

Я нашел расширенные символы ASCII с http://www.ascii-code.com/

ответил(а) 2020-04-04T02:14:18+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема