La meilleure façon est d'utiliser str.equalsIgnoreCase("foo")
. Il est spécifiquement optimisé à cet effet.
Vous pouvez également convertir les deux chaînes en majuscules ou minuscules avant de les comparer avec equals
. C'est une astuce utile à retenir pour d'autres langues qui pourraient ne pas avoir l'équivalent de equalsIgnoreCase
.
str.toUpperCase().equals(str2.toUpperCase())
Si vous utilisez un alphabet non-romain, prenez note de cette partie de la JavaDoc de equalsIgnoreCase
qui dit
Remarquez que cette méthode ne prend pas en compte la localisation et donnera des résultats insatisfaisants pour certaines localités. La classe Collator fournit une comparaison sensible à la localisation.
3 votes
Si vous savez que la sensibilité à la casse est importante, vous pourriez convertir les deux en minuscules ou en majuscules avant de les comparer.
1 votes
Si vous utilisez
s1.equalsIgnoreCase(s2)
vous pourriez échouer à le faire partout où cela doit être fait. Je suggère que vous trouviez d'où vient la chaîne - d'un fichier, d'une base de données ou d'une saisie utilisateur peut-être - et la convertissez en majuscules (ou minuscules) et continuez à utiliser .equals pour la comparaison.2 votes
Ne convertissez pas en minuscules/majuscules (comme suggéré par les commentaires ci-dessus), utilisez l'approche acceptée
equalsIgnoreCase
. Renseignez-vous sur le problème "i" turc et des problèmes similaires liés à l'Unicode pour la justification.0 votes
Vous devriez envisager de marquer une réponse comme acceptée. Je suggérerais celui qui a répondu en premier avec
equalsIgnoreCase
.1 votes
@OhadSchneider
equalsIgnoreCase
renvoie la mauvaise valeur pour le turc, car il renvoie true pour la comparaison de "i" et "I", alors qu'il devrait renvoyer false. Je soupçonne donc que si vous voulez prendre en compte les paramètres régionaux, unCollator
est en fait la voie à suivre.0 votes
@Trejkaz d'accord, il semble que
equalsIgnoreCase
est équivalent à la comparaisontoLowerCase
/toUpperCase
de toute façon (docs.oracle.com/javase/9/docs/api/java/lang/…). On dirait que .NET l'a mieux fait avec l'énumérationStringComparison
(docs.microsoft.com/en-us/dotnet/api/…).1 votes
@OhadSchneider Je me demande. Il est dit que le faire par caractère produit le même résultat, mais faire
toLowerCase
/toUpperCase
sur toute la chaîne et le faire par caractère donnent également deux résultats différents.0 votes
Côté note. Votre hi faute d'orthographe. Juste pour dire. C'est vraiment orthographié hi.