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.

38
demandé sur Eric Leschinski 2013-04-25 19:29:48

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))
38
répondu anubhava 2017-03-20 07:39:25

Avec Java 8 flux API:

List<String> myList = Arrays.asList("  A", "B  ", "  C  ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
38
répondu rogermenezes 2015-11-06 01:41:56

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.

14
répondu Bohemian 2015-10-13 15:23:14
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;
5
répondu Zyerah 2013-04-25 15:31:36

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.

2
répondu Zim-Zam O'Pootertoot 2013-04-25 15:36:32

, 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
2
répondu nkukhar 2014-08-06 14:52:43