Teste si une chaîne contient l’une des chaînes d’un tableau

Comment puis-je tester une chaîne pour voir si elle contient l’une des chaînes d’un tableau?

À la place d’utiliser

if (ssortingng.contains(item1) || ssortingng.contains(item2) || ssortingng.contains(item3)) 

Related of "Teste si une chaîne contient l’une des chaînes d’un tableau"

EDIT: Voici une mise à jour utilisant l’API Java 8 Streaming. Tellement plus propre Peut encore être combiné avec des expressions régulières aussi.

 public static boolean ssortingngContainsItemFromList(Ssortingng inputStr, Ssortingng[] items) { return Arrays.stream(items).parallel().anyMatch(inputStr::contains); } 

En outre, si nous modifions le type d’entrée en une liste au lieu d’un tableau, nous pouvons utiliser items.parallelStream().anyMatch(inputStr::contains) .

Vous pouvez également utiliser .filter(inputStr::contains).findAny() si vous souhaitez renvoyer la chaîne correspondante.


Réponse originale légèrement datée:

Voici une méthode statique (très basique). Notez qu’il est sensible à la casse sur les chaînes de comparaison. Un moyen primitif de le rendre insensible à la casse serait d’appeler toLowerCase() ou toUpperCase() à la fois sur les chaînes d’entrée et de test.

Si vous avez besoin de faire quelque chose de plus compliqué, je vous recommande de regarder les classes Pattern et Matcher et d’apprendre à faire des expressions régulières. Une fois que vous les comprenez, vous pouvez utiliser ces classes ou la méthode d’assistance Ssortingng.matches() .

 public static boolean ssortingngContainsItemFromList(Ssortingng inputStr, Ssortingng[] items) { for(int i =0; i < items.length; i++) { if(inputStr.contains(items[i])) { return true; } } return false; } 
 import org.apache.commons.lang.SsortingngUtils; 

Utils de cordes

Utilisation:

 SsortingngUtils.indexOfAny(inputSsortingng, new Ssortingng[]{item1, item2, item3}) 

Il retournera l’index de la chaîne trouvée ou -1 si aucun n’est trouvé.

Vous pouvez utiliser la méthode Ssortingng # correspond à ceci:

 System.out.printf("Matches - [%s]%n", ssortingng.matches("^.*?(item1|item2|item3).*$")); 

Le moyen le plus simple serait probablement de convertir le tableau en java.util.ArrayList. Une fois dans un arraylist, vous pouvez facilement utiliser la méthode contains.

 public static boolean bagOfWords(Ssortingng str) { Ssortingng[] words = {"word1", "word2", "word3", "word4", "word5"}; return (Arrays.asList(words).contains(str)); } 

Si vous utilisez Java 8 ou une version ultérieure, vous pouvez vous fier à l’ API Stream pour effectuer cette opération:

 public static boolean containsItemFromArray(Ssortingng inputSsortingng, Ssortingng[] items) { // Convert the array of Ssortingng items as a Stream // For each element of the Stream call inputSsortingng.contains(element) // If you have any match returns true, false otherwise return Arrays.stream(items).anyMatch(inputSsortingng::contains); } 

En supposant que vous ayez un grand tableau de Ssortingng à tester, vous pouvez également paralléliser la recherche en appelant parallel() , le code serait alors:

 return Arrays.stream(items).parallel().anyMatch(inputSsortingng::contains); 

Essaye ça:

 if (Arrays.asList(item1, item2, item3).contains(ssortingng)) 

Voici une solution:

 public static boolean containsAny(Ssortingng str, Ssortingng[] words) { boolean bResult=false; // will be set, if any of the words are found //Ssortingng[] words = {"word1", "word2", "word3", "word4", "word5"}; List list = Arrays.asList(words); for (Ssortingng word: list ) { boolean bFound = str.contains(word); if (bFound) {bResult=bFound; break;} } return bResult; } 
 if (Arrays.asList(array).contains(ssortingng)) 

Une approche plus groovyesque serait d’utiliser inject en combinaison avec metaClass :

Je voudrais aimer dire:

 Ssortingng myInput="This ssortingng is FORBIDDEN" myInput.containsAny(["FORBIDDEN","NOT_ALLOWED"]) //=>true 

Et la méthode serait:

 myInput.metaClass.containsAny={List notAllowedTerms-> notAllowedTerms?.inject(false,{found,term->found || delegate.contains(term)}) } 

Si vous avez besoin de containsAny pour toute future variable Ssortingng, ajoutez la méthode à la classe au lieu de l’object:

 Ssortingng.metaClass.containsAny={notAllowedTerms-> notAllowedTerms?.inject(false,{found,term->found || delegate.contains(term)}) } 

Et si vous recherchez une correspondance insensible à la casse, utilisez le motif

 Pattern pattern = Pattern.comstack("\\bitem1 |item2\\b",java.util.regex.Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); if(matcher.find() ){ } 

Depuis la version 3.4, Apache Common Lang 3 implémente la méthode containsAny .

Le tableau ci-dessous devrait fonctionner pour vous en supposant que Ssortingngs est le tableau que vous recherchez dans:

 Arrays.binarySearch(Ssortingngs,"mykeytosearch",mysearchComparator); 

où mykeytosearch est la chaîne que vous voulez tester pour l’existence dans le tableau. mysearchComparator – est un comparateur qui serait utilisé pour comparer des chaînes.

Reportez-vous à Arrays.binarySearch pour plus d’informations.