Java Set<String> l'égalité ignorer la casse
Je veux vérifier si tous les éléments de deux ensembles de la Chaîne sont égaux en ignorant la lettre du cas.
Set<String> set1 ;
Set<String> set2 ;
.
.
.
if(set1.equals(set2)){ //all elements of set1 are equal to set2
//dosomething
}
else{
//do something else
}
Cependant, ce contrôle d'égalité ne l'ignore pas, le cas de la chaîne. Est-il un autre moyen de le faire?
- Je pense que nous avons besoin d'un peu plus d'infos. Un
String
ne peut apparaître qu'une fois dans uneSet<String>
. Mais est-il possible, à votre demande, pour les deux chaînes,s1
ets2
, à la fois d'être dans un ensemble sis1.equalsIgnoreCase(s2)
esttrue
? Si oui, quel est le critère pour les deux ensembles étant égales par ailleurs, si un ensemble contient deux ou plus de l'équivalent des chaînes? Je pense que la solution va dépendre de nuances comme ça.
Vous devez vous connecter pour publier un commentaire.
Alternativement, vous pouvez utiliser
TreeSet
.Malheureusement, Java ne permet pas d'alimentation externe "comparateur d'égalité": lorsque vous utilisez des chaînes,
HashSet
utilise uniquement intégré danshashCode
etequals
.Vous pouvez contourner ce problème par le remplissage d'un auxiliaire
HashSet<String>
avec des chaînes de caractères convertie à une utilisation spécifique (c'est à dire supérieur ou inférieur), et alors la vérification de l'égalité, comme ceci:toUpperCase
) de travail si les lettres dans leString
s sont tous dans le A-Z ou A-z gamme, ou toutes en Latin-1 (0 à 255). Mais si les lettres peuvent inclure toutes les lettres de l'Unicode ensemble, il y a certaines lettres que, je crois, vis tente à une simple normalisation de la fonction.Pas testé, mais c'est l'idée générale:
Pas que je sache.
La meilleure solution que je peux voir, quoique conçu, serait de créer votre custom titulaire de la classe de la tenue d'une
String
champ d'instance (String
estfinal
et ne peut pas être héritée).Vous pouvez ensuite remplacer
equals
/hashCode
où pour deuxString
propriétésequalsIgnoreCase
dans les deux cas,equals
serait de retourtrue
ethashCode
s serait égal.Cela implique:
hashCode
renvoie un code de hachage basée sur une inférieure (ou supérieure) tubépropriété du code de hachage.
equals
est basé surequalsIgnoreCase
Sortie
... comme dit, au-dessus de l'ingénierie (mais de travail).
Je voudrais construire quelque chose comme ceci (dans une certaine forme de pseudo-code Java):
Vous pouvez utiliser une boucle et equalsIgnoreCase
Set<String>
, tandis que vous faites allusion à une méthode deString
. Ce ne sont pas interchangeables, mais je suppose que vous pourriez transformer en un bon de répondre par l'ajout d'une boucle autour de.