Я пытаюсь заказать список стран на китайском языке, используя Locale.SIMPLIFIED_CHINESE, который, кажется, заказывает с использованием пиньинь (фонетический алфавит, который является символом, упорядочен согласно их латинской корреспондентской комбинации, от А до Я).
Но я обнаружил некоторые случаи, когда он заказывает плохо. Например:
- Символом
- '中' является zhong1 Символом
- '梵' является fan4
Правильный порядок должен быть 梵 <中, но вместо этого он упорядочен по-другому.
String[] characters = new String[] {"梵", "中"};
List<String> list = Arrays.asList(characters);
System.out.println("Before sorting...");
System.out.println(list.toString());
Collator collator = Collator.getInstance(Locale.SIMPLIFIED_CHINESE);
collator.setStrength(Collator.PRIMARY);
Collections.sort(list, collator);
System.out.println("After sorting...");
System.out.println(list.toString());
Результаты этого фрагмента:
Before sorting...
[梵, 中]
After sorting...
[中, 梵]
Идя глубже, я нашел правила, которые Java применяет с Locale.SIMPLIFIED_CHINESE. Вы можете найти следующее изображение: http://postimg.org/image/4t915a7gp/full/ (обратите внимание, что 梵 после 中)
Я понял перед символом < 口 < 口 < 口 < 口, который я выделил красным цветом, все символы упорядочены в соответствии с их латинской корреспондирующей комбинацией от А до Z. Однако после < Знак 口 < 口 < 口 < 口, символы упорядочены по составу персонажа. Например, если все символы имеют одну и ту же часть (обычно левую часть символа), они группируются вместе, а не в соответствии с правилом от А до Я.
Кроме того, все символы после < 口 < < 口 < 口 < 口 менее типичные китайские символы. Таким образом, 梵 является менее общим символом, чем 中, поэтому он помещается после < 口 < 口 < 口 < 口 < 口.
Интересно, почему это решение, если оно намеренно. Но это приводит к неправильной сортировке. Я не знаю, как найти решение для этого.
Большое спасибо за ваше время!