Java contient ne fonctionne pas comme prévu, car le “someString” != “someString”
Je veux vérifier si une Chaîne de valeur val
est contenue dans une Liste de Chaînes de caractères permet de l'appeler stringList.
Je suis en train de faire ce
if(stringList.contains(val)){
System.out.println("The value is in there");
}
else{
System.out.println("There's no such value here");
}
Mais il semble toujours que la valeur n'est pas inclus. Est-ce parce que deux valeurs de Chaîne qui ont les mêmes caractères ne sont pas en fait l'égalité? Pour un "home-made" de la classe j'ai pu mettre en œuvre hashCode() et equals() et de remédier à ce problème, que puis-je faire pour la Chaîne de données?
EDIT:
La façon dont je suis arriver val est expliqué ici:
List<String> stringList = new ArrayList<String>();
stringList.add("PDT");
stringList.add("LDT");
stringList.add("ELNE");
String myFile = "/folder/myFile";
InputStream input = new FileInputStream(myFile);
CSVReader reader = new CSVReader(new InputStreamReader(input), ',','"', 1);
String[] nextLine;
try {
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null) {
if (nextLine[6] != null){
String val = nextLine[6];
if(stringList.contains(val)){
System.out.println("Success");
}
}
}
}
- Où obtenez-vous ce
val
à partir de? il pourrait être un problème d'encodage - Et en plus Binyamins question: Quel runtime type est stringList?
- Il est pris d'un .fichier csv, de sorte que vous peut-être raison. Est-ce que je peux faire - peut-on forcer l'encodage être le même pour les deux.
- stringList est une ArrayList
- Pourriez-vous montrer le contexte pour que le fragment de code contenant la construction/déclaration/type de
val
? - Oui je vais le faire, je tiens aussi à dire ... j'ai utilisé val.equals(aValThatIsInStringList) ... c'est que j'ai utilisé est égal à comparer avec les différents éléments de la stringList ... j'imagine que si c'était le codage liées, ceci ne fonctionnerait pas (mais j'ai un pas sûr à ce sujet)
InformationsquelleAutor Ankur | 2012-09-23
Vous devez vous connecter pour publier un commentaire.
ArrayList.contains()
utiliseObject.equals()
pour vérifier l'égalité (hashCode()
n'est pas impliqué dansList
). Cela fonctionne bien pour les chaînes. Probablement, votre chaîne n'est vraiment pas contenu dans la liste...Vous avez probablement négligé certains espaces ou le haut/bas-de-casse ou de codage de la différence...
mySet.contains("familia")
, mais pas pourmySet.contains("família")
. La liste (dans mon cas j'ai utilisé unSet
) contient deux éléments.Plus de code s'il vous plaît!
Cela fonctionne:
Qui n'est pas bonne:
contains
utiliseequals
plutôt que==
, donc si la chaîne est dans la liste, il doit être trouvé. Cela peut être vérifié dans leindexOf
méthode de la superclasse AbstractList utilisé parArrayList
.Suivant votre montage, assurez-vous que vous
trim
cordes avant de fairecontains
, sinon ils peuvent contenir de lanewline
personnage(s).Essayez ce qui suit, d'abord faire le chèque de plus concret par l'itération de la liste et de vérifier chaque élément séparément. Que, lorsque vous appuyez sur les éléments que vous vous attendez à être égaux, C'est ce que vous êtes censé être en train de regarder. Vérifiez pour voir si elles sont vraiment égaux. Peut-être qu'il s'agit d'un cas de différence? (ou certains autres insaisissable mais simple différence comme un espace blanc?)
Essayer de remplacer equals(){}, de sorte que vous pouvez spécifier les besoins en biens de comparer l'égalité .... 😛