Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Сортировка текста в алфавитном порядке в TreeSet |
Автор: Kizja 9.3.2010, 00:39 | ||
Привет! Хотел сделать сортировщик текста в алфавитном порядке, используя TreeSet, однако обнаружил, что сортируются правильно не все языки... В приведённом тесте пытаюсь сортировать алфавиты английского, немецкого, русского и эстонского языков. Первые два работают правильно... Однако тесты русского и эстонского языка не проходят: 1) В русском ставит букву "Ё" вперёд всех остальных 2) В эстонском ставит в неверные места буквы "Š", "Ž", "Õ", "Ä"
На сколько я понимаю это происходит потому что сравнивая два символа код одного больше или меньше кода другого, однако если соответствовать последовательности алфавитного порядка, то в тех случаях ожидается противоположный результат... Я так думаю, что можно для каждого языка написать свой Comparator, который будет строить последовательность правильно, однако для каждого делать свой как-то не хотелось бы... Я не думаю, что первый кто столкнулся с проблемой сортировки по алфавиту... Почти в любом веб приложении существует сортировка колонок в алфавитном порядке... Поэтому собственно вопрос - как изменить данный код, чтобы он работал бы верно и для русского и эстонского языков ? Т.е. можно ли сделать какой-то универсальный сортировщик, который бы работал верно для любого языка ? |
Автор: LSD 9.3.2010, 13:59 |
А чем не устраивает http://java.sun.com/j2se/1.5.0/docs/api/java/text/Collator.html? |
Автор: Kizja 13.3.2010, 03:23 |
LSD, спасибо, не знал про Collator и вобщем-то данный тест с ним работает, но я здесь привёл несколько упрощённый вариант того, чего мне хотелось бы добиться... А именно хотел получить сортировку слов в алфавитном порядке и в этом случае Collator ведёт себя в некоторых случаях не очень адекватно. Например пробовал тестировать эстонский текст и в словах текста были буквы "V" и "W" - оказалось, что он их не различает и в результате сортировки получаются слова с этими буквами вперемешку, т.е. например выдаёт Va, Wb, Vc, Wd вместо Va, Vc, Wb, Wd - т.е. сортирует по последующим буквам, а "V" и "W" расценивает как одну и ту же букву. |
Автор: Vier 15.3.2010, 13:58 |
Можно сделать один comparator и передавать ему алфавитную строку. |
Автор: LSD 17.3.2010, 19:35 |
Хотелось бы маленький пример с демонстрацией ошибки. |
Автор: Kizja 18.3.2010, 22:34 | ||||
LSD, добавил в тот пример, который приводил выше, сортировку с Collator-ом...
Для русского языка не проходит тест без Collator-а: ставит "Ё" вперёд остальных букв. Возможно кстати и с Collator-ом в каком-то случае тоже не пройдёт, но я не обнаружил пока что. Для эстонского языка не проходят оба теста: без Collator-а сортирует неправильно буквы "Š", "Ž", "Õ", "Ä", а для варианта с Collator-ом ставит неверно Va, Wb, Vc, Wd Вот выводимый результат:
|
Автор: LSD 25.3.2010, 17:14 | ||||||
Ну не факт, что это неправильно:
http://www.einst.ee/publications/language/alphabet.html
http://www.eki.ee/keel/et003.html
http://ru.wikipedia.org/wiki/%D0%AD%D1%81%D1%82%D0%BE%D0%BD%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BB%D1%84%D0%B0%D0%B2%D0%B8%D1%82 Т.е. W как-то по особому может обрабатываться в эстонском. Так что возможно, что так и надо сортировать. В любом случае, это уже лучше с лингвистами разговаривать. |