Tester si une chaîne contient l'une des chaînes à partir d'un tableau
Comment puis-je tester une chaîne pour voir s'il contient des chaînes de caractères à partir d'un tableau?
Au lieu d'utiliser
if (string.contains(item1) || string.contains(item2) || string.contains(item3))
- Demandez-vous si une chaîne est égal à l'une des chaînes dans le tableau, ou contient l'une des chaînes à partir de la matrice?
- Vous voulez vérifier si une chaîne de caractères à partir de la matrice est une sous-chaîne de la chaîne d'entrée? Ou si vous voulez vérifier si votre chaîne d'entrée est égal à celui de la chaîne dans le tableau? Pouvez-vous être plus précis?
- contient, de sorte qu'il faut une ligne et voit si elle contient l'un des mots à partir d'une liste (stockées dans un tableau de chaînes de caractères)
Vous devez vous connecter pour publier un commentaire.
EDIT: Voici une mise à jour à l'aide de Java 8 Streaming API. Bien plus propre. Peut encore être combiné avec des expressions régulières aussi.
Aussi, si l'on change le type d'entrée à 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 retourner la chaîne correspondante.D'origine légèrement daté réponse:
Voici un (TRÈS BASIQUE) méthode statique. Notez qu'il est sensible à la casse sur la comparaison des chaînes de caractères. Un primitive moyen de le rendre insensible à la casse serait d'appeler
toLowerCase()
outoUpperCase()
sur à la fois les entrées et les chaînes de test.Si vous avez besoin de faire quelque chose de plus compliqué que cela, je vous recommande de regarder le Modèle et Matcher classes et d'apprendre à faire de certains des expressions régulières. Une fois que vous comprenez ceux-ci, vous pouvez utiliser ces classes ou les
String.matches()
méthode d'assistance.Chaîne Utils
Utilisation:
Il sera de retour à l'index de la chaîne ou -1 si aucun n'est trouvé.
Vous pouvez utiliser String#matchs méthode comme ceci:
La façon la plus simple serait probablement de convertir le tableau en java.util.Liste de tableaux. Une fois qu'il est dans une arraylist, vous pouvez facilement tirer profit de la méthode contains.
string
contient toutString
s dans le tableau, pas si toutString
s dans le tableau contientstring
..equals()
à leur poste, ce qui est très déroutant. Je pense qu'ils doivent modifier leur questionSi vous utilisez Java 8 ou au-dessus, vous pouvez compter sur l' Flux API à faire une telle chose:
En supposant que vous avez une grande gamme de big
String
pour tester vous pouvez également lancer la recherche en parallèle en appelantparallèle()
, le code serait alors:Essayez ceci:
Voici une solution :
Depuis la version 3.4 Apache Commune Lang 3 mettre en œuvre le containsAny méthode.
Plus groovyesque approche serait d'utiliser injecter en combinaison avec métaclasse:
Je voudrais amour-à-dire:
Et la méthode serait:
Si vous avez besoin d' containsAny à être présents pour qu'un avenir variable String puis ajouter une méthode à la classe, au lieu de l'objet:
Et si vous êtes à la recherche pour la casse match, utilisez le motif
Ci-dessous doivent travailler pour vous, en supposant que Chaînes est le tableau que vous êtes à la recherche à l'intérieur:
où mykeytosearch est la chaîne que vous souhaitez tester l'existence au sein de la matrice.
mysearchComparator - est un comparateur qui serait utilisé pour comparer des chaînes de caractères.
Reportez-vous à Les tableaux de.binarySearch pour plus d'informations.