Comment tester une chaîne pour voir si elle contient l'une des chaînes d'un tableau?
À la place d'utiliser
if (string.contains(item1) || string.contains(item2) || string.contains(item3))
java
string
coding-style
if-statement
à droite
la source
la source
Réponses:
EDIT: Voici une mise à jour utilisant l'API Java 8 Streaming. Tellement plus propre. Peut également être combiné avec des expressions régulières.
De plus, si nous changeons le type d'entrée en List 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. Une façon primitive de le rendre insensible à la casse serait d'appeler
toLowerCase()
outoUpperCase()
à la fois sur les chaînes d'entrée et de test.Si vous avez besoin de faire quelque chose de plus compliqué que cela, je vous recommande de regarder les classes Pattern et Matcher et d'apprendre à faire des expressions régulières. Une fois que vous les avez compris, vous pouvez utiliser ces classes ou la
String.matches()
méthode d'assistance.la source
Utils de chaîne
Utilisation:
Il renverra l'index de la chaîne trouvée ou -1 si aucun n'est trouvé.
la source
Vous pouvez utiliser la méthode String # matches comme ceci:
la source
Le moyen le plus simple serait probablement de convertir le tableau en java.util.ArrayList. Une fois qu'il est dans une arraylist, vous pouvez facilement utiliser la méthode contains.
la source
string
contient desString
s dans le tableau, pas si desString
s dans le tableau contiennentstring
..equals()
dans leur message, ce qui est très déroutant. Je pense qu'ils doivent modifier leur questionSi vous utilisez Java 8 ou supérieur, vous pouvez compter sur l' API Stream pour faire une telle chose:
En supposant que vous ayez un grand tableau de big
String
à tester, vous pouvez également lancer la recherche en parallèle en appelantparallel()
, le code serait alors:la source
Voici une solution:
la source
Depuis la version 3.4 Apache Common Lang 3 implémente la méthode containsAny .
la source
Une approche plus groovyesque serait d'utiliser inject en combinaison avec métaclasse :
J'adorerais dire:
Et la méthode serait:
Si vous avez besoin que containsAny soit présent pour toute future variable String, ajoutez la méthode à la classe au lieu de l'objet:
la source
Essaye ça:
la source
Et si vous recherchez une correspondance insensible à la casse, utilisez le modèle
la source
Si vous seraching pour entiers mots que vous pouvez faire ce qui fonctionne le cas insensible .
la source
On peut aussi faire comme ça:
la source
Ce qui suit devrait fonctionner pour vous en supposant que Strings est le tableau dans lequel vous recherchez:
où mykeytosearch est la chaîne dont vous souhaitez tester 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.
la source
la source