Jak przetestować ciąg, aby sprawdzić, czy zawiera którykolwiek z ciągów z tablicy?
Zamiast używać
if (string.contains(item1) || string.contains(item2) || string.contains(item3))
java
string
coding-style
if-statement
arowell
źródło
źródło
Odpowiedzi:
EDYCJA: Oto aktualizacja wykorzystująca API strumieniowania Java 8. O wiele czystsze. Nadal można go również łączyć z wyrażeniami regularnymi.
Ponadto, jeśli zmienimy typ danych wejściowych na List zamiast tablicy, której możemy użyć
items.parallelStream().anyMatch(inputStr::contains)
.Możesz również użyć,
.filter(inputStr::contains).findAny()
jeśli chcesz zwrócić pasujący ciąg.Oryginalna nieco przestarzała odpowiedź:
Oto (BARDZO PODSTAWOWA) metoda statyczna. Zauważ, że w łańcuchach porównania rozróżniana jest wielkość liter. Prymitywny sposób, aby to wielkość liter ma znaczenie byłoby zadzwonić
toLowerCase()
lubtoUpperCase()
na obu ciągów wejściowych i testowych.Jeśli potrzebujesz zrobić coś bardziej skomplikowanego niż to, polecam przyjrzenie się klasom Pattern i Matcher i nauczenie się wykonywania wyrażeń regularnych. Gdy je zrozumiesz, możesz użyć tych klas lub
String.matches()
metody pomocniczej.źródło
Narzędzia sznurkowe
Posługiwać się:
Zwróci indeks znalezionego ciągu lub -1, jeśli żaden nie zostanie znaleziony.
źródło
Możesz użyć metody String # match w następujący sposób:
źródło
Najłatwiejszym sposobem byłoby prawdopodobnie przekonwertowanie tablicy na java.util.ArrayList. Gdy znajdzie się na liście arraylistów, możesz łatwo wykorzystać metodę zawierającą.
źródło
string
zawiera jakieśString
s w tablicy, a nie czy zawiera jakieśString
s w tablicystring
..equals()
w swoim poście, co jest bardzo mylące. Myślę, że muszą zmienić swoje pytanieJeśli używasz Java 8 lub nowszej, możesz polegać na Stream API, aby zrobić coś takiego:
Zakładając, że masz dużą tablicę dużych
String
do przetestowania, możesz również uruchomić wyszukiwanie równolegle, wywołującparallel()
, kod wyglądałby wtedy:źródło
Oto jedno rozwiązanie:
źródło
Począwszy od wersji 3.4 Apache Common Lang 3 zaimplementowano metodę containsAny .
źródło
Bardziej groovyesque byłoby użycie wstrzyknięcia w połączeniu z metaClass :
Bardzo chciałbym powiedzieć:
A metoda byłaby taka:
Jeśli chcesz, aby zawierała ona wszystkie przyszłe zmienne typu String, dodaj metodę do klasy zamiast do obiektu:
źródło
Spróbuj tego:
źródło
A jeśli szukasz dopasowania bez rozróżniania wielkości liter, użyj wzorca
źródło
Jeśli szukasz całych słów, możesz to zrobić bez rozróżniania wielkości liter .
źródło
Możemy też zrobić tak:
źródło
Poniższe powinno zadziałać, zakładając, że ciągi znaków to tablica, w której szukasz:
gdzie mykeytosearch to ciąg, który chcesz sprawdzić pod kątem istnienia w tablicy. mysearchComparator - to komparator, który byłby używany do porównywania ciągów.
Więcej informacji zawiera Arrays.binarySearch .
źródło
źródło