Wie teste ich eine Zeichenfolge, um festzustellen, ob sie Zeichenfolgen aus einem Array enthält?
Anstatt zu verwenden
if (string.contains(item1) || string.contains(item2) || string.contains(item3))
java
string
coding-style
if-statement
arowell
quelle
quelle
Antworten:
BEARBEITEN: Hier ist ein Update mit der Java 8 Streaming API. So viel sauberer. Kann auch noch mit regulären Ausdrücken kombiniert werden.
Wenn wir den Eingabetyp in eine Liste anstelle eines Arrays ändern, können wir ihn auch verwenden
items.parallelStream().anyMatch(inputStr::contains)
.Sie können auch verwenden,
.filter(inputStr::contains).findAny()
wenn Sie die übereinstimmende Zeichenfolge zurückgeben möchten.Ursprüngliche leicht veraltete Antwort:
Hier ist eine (SEHR GRUNDLEGENDE) statische Methode. Beachten Sie, dass bei den Vergleichszeichenfolgen zwischen Groß- und Kleinschreibung unterschieden wird. Eine primitive Möglichkeit, die Groß- und Kleinschreibung nicht zu berücksichtigen, besteht darin, die Eingabe- und die Testzeichenfolge aufzurufen
toLowerCase()
odertoUpperCase()
zu aktivieren.Wenn Sie etwas komplizierteres tun müssen, würde ich empfehlen, sich das Muster anzusehen und Matcher Klassen und lernen , wie man einige reguläre Ausdrücke zu tun. Sobald Sie diese verstanden haben, können Sie diese Klassen oder die
String.matches()
Hilfsmethode verwenden.quelle
String Utils
Verwenden:
Es wird der Index der gefundenen Zeichenfolge oder -1 zurückgegeben, wenn keine gefunden wird.
quelle
Sie können die String # match- Methode wie folgt verwenden:
quelle
Der einfachste Weg wäre wahrscheinlich, das Array in eine java.util.ArrayList zu konvertieren. Sobald es sich in einer Arrayliste befindet, können Sie die Contains-Methode problemlos nutzen.
quelle
string
irgendwelche enthältString
s in dem Array, nicht , ob irgendwelcheString
s in dem Array enthaltenstring
..equals()
in ihrem Beitrag, was sehr verwirrend ist. Ich denke, sie müssen ihre Frage bearbeitenWenn Sie Java 8 oder höher verwenden, können Sie sich auf die Stream-API verlassen , um Folgendes zu tun:
Angenommen, Sie haben eine große Auswahl an Big-
String
Tests, können Sie die Suche auch parallel durch Aufrufen starten.parallel()
Der Code lautet dann:quelle
Hier ist eine Lösung:
quelle
Seit der Version 3.4 Apache Commons Lang 3 , um die Umsetzung containsAny Methode.
quelle
Ein groovyesque Ansatz wäre die Verwendung inject in Kombination mit Metaklasse :
Ich würde gerne sagen:
Und die Methode wäre:
Wenn Sie containsAny anwesend zu sein für jedes zukünftige String - Variable dann das Verfahren auf die anstelle der Objektklasse hinzu:
quelle
Versuche dies:
quelle
Wenn Sie nach einer Übereinstimmung suchen, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, verwenden Sie das Muster
quelle
Wenn Sie nach ganzen Wörtern suchen , können Sie dies tun, ohne die Groß- und Kleinschreibung zu beachten .
quelle
Das können wir auch so machen:
quelle
Das Folgende sollte für Sie funktionieren, vorausgesetzt, Strings ist das Array, in dem Sie suchen:
Dabei ist mykeytosearch die Zeichenfolge, die Sie auf Existenz innerhalb des Arrays testen möchten. mysearchComparator - ist ein Komparator, der zum Vergleichen von Zeichenfolgen verwendet wird.
Weitere Informationen finden Sie unter Arrays.binarySearch .
quelle
quelle