J'essaye de commander une liste de pays en chinois en utilisant Locale.SIMPLIFIED_CHINESE, qui semble commander en utilisant pinyin (alphabet phonétique, c'est-à-dire que les caractères sont classés en fonction de leur combinaison de caractères latins) , de A à Z).Mauvais tri avec Collator en utilisant Locale.SIMPLIFIED_CHINESE
Mais j'ai trouvé quelques cas quand il commande mal. Par exemple:
- '中' caractère est zhong1
- caractère '梵' est FAN4
devrait être 梵 < 中, mais il est commandé l'ordre correct dans l'autre sens.
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());
Les résultats de cet extrait sont:
Before sorting...
[梵, 中]
After sorting...
[中, 梵]
En approfondissant, je trouve les règles que Java applique avec Locale.SIMPLIFIED_CHINESE. Vous pouvez trouver dans l'image suivante: http://postimg.org/image/4t915a7gp/full/ (Notez que 梵 est après 中)
j'ai réalisé avant la < 口 < 口 < 口 < 口 < 口 que je surlignés en rouge, tous les personnages sont classés en fonction de leur correspondant latin combinaison, de A à Z. Cependant, après le signe < 口 < 口 < 口 < 口 < 口, les caractères sont classés par la composition du caractère. Par exemple, si tous les personnages ont une même partie (généralement la partie gauche du personnage), ils sont alors regroupés, non pas selon la règle de A à Z.
En outre, tous les personnages après la < 口 口 < < 口 口 < < 口 sont moins courants caractères chinois. Donc, 梵 est un caractère moins commun que 中, donc il est mis après < 口 < 口 < 口 < 口 < 口.
Je me demande pourquoi cette décision, si elle est intentionnelle. Mais il en résulte des tris erronés. Je ne sais pas comment trouver une solution pour cela.
Merci beaucoup pour votre temps!
Avez-vous essayé d'utiliser icu4j? – fge
J'ai essayé pinyin4j, et leur commande est bonne. icu4j pas encore essayé. Mais ma question est de savoir pourquoi Oracle trier avec ces règles, c'est peut-être un bug à signaler, ou peut-être qu'il y a une autre façon d'utiliser l'API Java pour trier avec les conventions pinyin. Dans mon entreprise, il est difficile d'ajouter de nouvelles bibliothèques en raison de la fiabilité. Merci pour votre soutien! – elegarpes