Je pense que vous devriez utiliser la classe Collator. Elle vous permet de définir une force et une locale et elle comparera les caractères de manière appropriée.
De l'API Java 1.6 :
Vous pouvez définir la propriété " strength " d'un collateur pour déterminer le niveau de de différence considéré comme significatif dans les comparaisons. Quatre forces sont disponibles : PRIMAIRE, SECONDAIRE, TERTIAIRE, et IDENTIQUE. L'attribution exacte l'affectation exacte des points forts aux dépend de la langue. Par exemple, Par exemple, en tchèque, " e " et " f " sont considérés comme des différences primaires, tandis que "e" et "ě" sont des différences secondaires, "e" et "E" sont des différences tertiaires. et "e" et "e" sont identiques.
Je pense que le point important ici (que les gens essaient de faire comprendre) est que "Joao" et "João" ne devraient jamais être considérés comme égaux, mais si vous faites un tri, vous ne voulez pas qu'ils soient comparés sur la base de leur valeur ASCII, car vous auriez alors quelque chose comme Joao, John, João, ce qui n'est pas bon. L'utilisation de la classe collator permet de gérer correctement ce problème.
9 votes
Mais ce sont PAS pourquoi voudriez-vous qu'ils soient égaux alors qu'ils ne le sont pas ?
6 votes
@fuzzy les deux sont généralement le même nom (c'est la version portugaise pour John). Certaines personnes sont simplement paresseuses pour inclure les accents.
1 votes
En espagnol, n et ñ sont considérés comme des lettres différentes.
8 votes
Oui, mais d'après son exemple, il semble qu'il veuille comparer des noms et ne s'inquiète pas trop des faux positifs.
0 votes
En espagnol, n et ñ sont considérés comme des lettres différentes. Il faut trier entre n et o. Il y a même une touche de clavier distincte. Pour autant que je sache, en allemand, "ö" doit être considéré comme égal à "oe", et non à "o". Comment allez-vous gérer tout cela ? :)
0 votes
Je suis espagnol et ce n'est pas la même chose de signifier que 'á' et 'a' sont la même lettre que 'n' et 'ñ' (en parlant de noms, c'est peut-être la même chose qui est mon besoin).
0 votes
@Framara : Veuillez reconsidérer la réponse acceptée.
0 votes
De toute façon, ce n'est pas le même caractère pour l'ordinateur, ce sont deux caractères unicode différents, donc ils le sont par définition. PAS égal. Vous devrez créer votre propre comparateur pour obtenir le comportement incorrect que vous recherchez. Ce que vous devriez chercher, c'est quelque chose comme Metaphone.
1 votes
Ils ne sont pas égaux, mais l'égalité supposée est utile lors des comparaisons pour le tri, ou dans les noms de fichiers, où les caractères UTF-8 ne sont pas bien supportés (par exemple dans les fichiers zip...).
9 votes
Cela peut être extrêmement utile pour la recherche. Les utilisateurs sont trop paresseux pour taper correctement les accents sur un clavier qwerty. Peut-être que la question devrait être reformulée pour déterminer si deux chaînes de caractères sont similaire au lieu d'égal cependant.
1 votes
Ceci est très valable, notamment dans les systèmes qui doivent comparer des données internationales. 1- Il est probable que très peu de systèmes dans le monde gèrent correctement le multilinguisme. Par exemple, il est mentionné dans les fils de discussion ci-dessous que même Java a un support bogué de l'Unicode. 2- Lorsque vous avez des services qui acceptent des données de tierces parties, tout s'écroule. Puisque personne ne traite jamais les données de manière cohérente. 2- Comme mentionné précédemment, les gens ne saisissent pas les données correctement. Soit par paresse, soit à cause de fautes de frappe, etc... 3- Joao pourrait aussi bien être un utilisateur espagnol utilisant malheureusement un ordinateur anglais.
0 votes
@JarrodRoberson Il s'agit de l'égalité fonctionnelle et l'égalité fonctionnelle signifie l'égalité contextuelle. Quelque chose peut être fonctionnellement égal à de nombreux objets différents en fonction de son cas d'utilisation, de son contexte. Il ne s'agit peut-être même pas de points de code, mais plutôt du nombre de pixels utilisés pour dessiner les symboles. Il n'existe pas de définition unique de l'égalité. Mettre des mots en gras ne change rien à ce fait.
0 votes
Les gens ici doivent faire la différence entre l'égalité technique et l'égalité fonctionnelle. Techniquement, ce n'est évidemment pas la même chose. D'un point de vue fonctionnel, en fonction de votre domaine, de votre cas d'utilisation et de la logique commerciale qui en découle, "Joao" peut être égal à "João", "Jo" ou même à "bob" et "1234" en même temps. Si la comparaison s'arrête aux caractères primaires (caractères de base non accentués), un collateur de force PRIMAIRE fait parfaitement l'affaire.