Java, retour si la liste contient une chaîne
En Java, je veux vérifier si une chaîne existe dans un List<String> myList
.
Quelque Chose comme ceci:
if(myList.contains("A")){
//true
}else{
// false
}
Le problème est que myList peut contenir des données non rognées:
{' A', 'B ', ' C '}
Je veux qu'il retourne true si mon article 'B'
est dans la liste. Comment dois-je faire? Je voudrais éviter une structure en boucle.
6 réponses
Vous devez itérer votre liste et appeler String#trim
pour la recherche:
String search = "A";
for(String str: myList) {
if(str.trim().contains(search))
return true;
}
return false;
Ou si vous voulez effectuer ignorer la recherche de casse , Utilisez:
search = search.toLowerCase(); // outside loop
// inside the loop
if(str.trim().toLowerCase().contains(search))
Avec Java 8 flux API:
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 très bien fonctionner.
BTW, vous pouvez construire la regex à 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 de recherche 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 parcourra chaque chaîne de la liste et vérifiera si elle contient la chaîne que vous recherchez. Si ce ne sont que des espaces que vous voulez piéger, 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 de chercher. 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;
Vous pouvez utiliser une bibliothèque de correspondance de chaîne approximative pour ce faire, par exemple SecondString , mais c'est presque certainement exagéré - utilisez simplement l'une des réponses for-loop fournies à la place.
, Essayez ceci:
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
fonctionne pas le même que contains
dans List
List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true