En Java, je veux vérifier si une chaîne existe dans un List<String> myList
.
Quelque chose comme ça:
if(myList.contains("A")){
//true
}else{
// false
}
Le problème est que myList peut contenir des données non tronquées:
{' A', 'B ', ' C '}
Je veux qu'il retourne vrai si mon objet 'B'
est dans la liste. Comment dois-je faire cela? Je voudrais éviter une structure en boucle.
Vous devez parcourir votre liste et appeler String#trim
pour effectuer une recherche:
_String search = "A";
for(String str: myList) {
if(str.trim().contains(search))
return true;
}
return false;
_
OU si vous voulez ignorer la recherche de cas , utilisez:
_search = search.toLowerCase(); // outside loop
// inside the loop
if(str.trim().toLowerCase().contains(search))
_
Avec Java 8 API de flux:
List<String> myList = Arrays.asList(" A", "B ", " C ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
Vous pouvez le faire en une seule ligne en utilisant regex:
if (myList.toString().matches(".*\\bA\\b.*"))
Ce code devrait fonctionner assez bien.
BTW, vous pouvez construire l’expression rationnelle à partir d’une variable, comme ceci:
.matches("\\[.*\\b" + Word + "\\b.*]")
J'ai ajouté [
et ]
à chaque extrémité pour éviter une correspondance faussement positive lorsque le terme recherché contient un crochet ouvert/fermé au début/à la fin.
String search = "A";
for(String s : myList)
if(s.contains(search)) return true;
return false;
Cela va parcourir chaque chaîne de la liste et vérifier si elle contient la chaîne que vous recherchez. Si vous ne voulez piéger que des espaces, vous pouvez le faire:
String search = "A";
for(String s : myList)
if(s.replaceAll(" ","").contains(search)) return true;
return false;
qui remplacera d’abord les espaces par des chaînes vides avant la recherche. De plus, si vous voulez juste couper la chaîne en premier, vous pouvez faire:
String search = "A";
for(String s : myList)
if(s.trim().contains(search)) return true;
return false;
Essaye ça:
for(String str: myList) {
if(str.trim().equals("A"))
return true;
}
return false;
Vous devez utiliser str.equals
ou str.equalsIgnoreCase
au lieu de contains
car contains
dans string
ne fonctionne pas de la même façon que contains
dans List
List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
Pour ce faire, vous pourrez peut-être utiliser une bibliothèque de correspondance de chaîne approximative, par exemple. SecondString , mais c'est presque certainement excessif - utilisez simplement l'une des réponses for-loop fournies à la place.
Vous pouvez utiliser votre propre code. Vous n'avez pas besoin d'utiliser la structure en boucle si vous ne voulez pas utiliser la structure en boucle comme vous l'avez dit ci-dessus. Vous devez seulement faire la mise au point pour supprimer l’espace ou couper la chaîne de la liste.
Si vous utilisez Java8, vous pouvez simplement couper la chaîne en utilisant la seule ligne du code:
myList = myList.stream().map(String :: trim).collect(Collectors.toList());
L'importance de la ligne ci-dessus est que, dans le futur, vous pouvez également utiliser une liste ou un ensemble. Maintenant, vous pouvez utiliser votre propre code:
if(myList.contains("A")){
//true
}else{
// false
}