java:java.text.RuleBasedCollator
Un article de Polydoc.
Sommaire |
[modifier] Description
La classe RuleBasedCollator est l'unique classe étendant Collator (dans java.text). Les objets retournés par Collator.getInstance() sont des instances de RuleBasedCollator. Pour un usage classique de comparaison, les méthodes de la classe Collator suffisent. Pour un usage plus avancé, il peut être utile de savoir comment RuleBasedCollator fonctionne et, en particulier, de faire appel à la classe CollationElementIterator.
En effet, un caractère peut être soit ignoré, soit associé à un autre caractère (par exemple, le caractère « accent aigu » précédant un « e »), soit converti en un ou plusieurs entiers. Chacun de ces entiers correspond en fait à un char et deux byte. Le char correspond à la valeur du premier niveau de précision, le premier byte au deuxième degré de précision, le deuxième byte du troisième degré de précision.
Autrement dit, lorsqu'une instance de RuleBasedCollator se limite au premier degré de précision, il convertit les caractères en entiers et compare uniquement la partie char des entiers.
Le char et les deux byte peuvent être obtenus grâce aux méthodes statiques de la classe CollationElementIterator : CollationElementIterator.primaryOrder(), CollationElementIterator.secondaryOrder() et CollationElementIterator.tertiaryOrder().
[modifier] Construction
Une instance de RuleBasedCollator s'obtient en surclassant l'objet renvoyé par la méthode Collator.getInstance() :
RuleBasedCollator ruleBasedCollator = (RuleBasedCollator) Collator.getInstance(Locale.FRENCH);
[modifier] Exemples
Dans l'exemple suivant, l'utilisation de CollationElementIterator « normalise x une chaîne de caractères : elle la transforme entre une autre chaîne de caractères correspondant aux valeurs du premier niveau de précision uniquement.
String entree = "Œuvre d'ART"; RuleBasedCollator ruleBasedCollator = (RuleBasedCollator) Collator.getInstance(Locale.FRENCH); StringBuffer buf = new StringBuffer(); CollationElementIterator collationElementIterator = ruleBasedCollator.getCollationElementIterator(entree); while (true) { int order = collationElementIterator.next(); if (order == CollationElementIterator.NULLORDER) break; int primary = CollationElementIterator.primaryOrder(order); if (primary > 0) { buf.append((char)primary); } } String result = buf.toString();
« Œuvre d'ART » et « oeuvre D'art » donneront la même chaîne en résultat. Cette chaîne pourra par exemple être utilisé comme clé dans une table afin de stocker les occurences d'« oeuvre d'art ». À noter que la chaîne obtenue n'est pas « signifiante » puisqu'il s'agit de la chaîne aWghdWU�Rdf. Elle est suffisante cependant pour faire des tris et des comparaisons.

