Chcę użyć C #, aby sprawdzić, czy wartość ciągu zawiera słowo w tablicy ciągu. Na przykład,
string stringToCheck = "text1text2text3";
string[] stringArray = { "text1", "someothertext", etc... };
if(stringToCheck.contains stringArray) //one of the items?
{
}
Jak mogę sprawdzić, czy wartość ciągu „stringToCheck” zawiera słowo w tablicy?
Odpowiedzi:
oto jak możesz to zrobić:
AKTUALIZACJA: Być może szukasz lepszego rozwiązania. Zapoznaj się z odpowiedzią @Anton Gogolev poniżej, która korzysta z LINQ.
źródło
Oto jak:
Sprawdza, czy
stringToCheck
zawiera którykolwiek z podciągów zstringArray
. Jeśli chcesz się upewnić, że zawiera wszystkie podciągi, zmieńAny
naAll
:źródło
stringArray.Any(s => s.IndexOf(stringToCheck, StringComparison.CurrentCultureIgnoreCase) > -1)
Spróbuj tego:
Nie ma potrzeby korzystania z LINQ
źródło
stringArray.Any(w => stringToCheck.IndexOf(w) >= 0)
ale odpowiedź Linq przy użyciu String.Contains ma większy sens, ponieważ właśnie o to proszono.Wystarczy użyć metody linq:
źródło
using System.Linq;
Najprostszy i próbny sposób.
źródło
źródło
Może coś takiego:
źródło
String.Contains
może być lepszy niżString.IndexOf
chyba, że chcesz zignorować wielkość liter, ponieważ Microsoft zapomniał o dwóch argumentach,String.Contains
które musisz napisać własny. Zastanów się:Array.Exists(stringArray, s => stringToCheck.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1)
Użycie Linq i grupy metod byłoby najszybszym i bardziej zwartym sposobem na zrobienie tego.
źródło
Możesz zdefiniować własne
string.ContainsAny()
istring.ContainsAll()
metody. Jako bonus wrzuciłem nawetstring.Contains()
metodę pozwalającą na porównanie bez rozróżniania wielkości liter itp.Możesz je przetestować za pomocą następującego kodu:
źródło
Korzystam z poniższych w aplikacji konsoli, aby sprawdzić argumenty
źródło
Chciałbym użyć Linq, ale nadal można to zrobić poprzez:
źródło
Próbować:
źródło
Można również zrobić to samo, co Anton Gogolev sugeruje, by sprawdzić, czy każdy element w
stringArray1
dopasowuje dowolny element wstringArray2
:Podobnie wszystkie elementy w stringArray1 pasują do wszystkich elementów w stringArray2:
źródło
źródło
spróbuj tego, oto przykład: Aby sprawdzić, czy pole zawiera którekolwiek ze słów w tablicy. Aby sprawdzić, czy pole (someField) zawiera którekolwiek ze słów w tablicy.
źródło
źródło
Użyłem podobnej metody do IndexOf autorstwa Maitrey684 i pętli foreach Theomax, aby to stworzyć. (Uwaga: pierwsze 3 linie „string” są tylko przykładem tego, jak można utworzyć tablicę i ustawić ją we właściwym formacie).
Jeśli chcesz porównać 2 tablice, zostaną one rozdzielone średnikami, ale ostatnia wartość nie będzie miała żadnej po niej. Jeśli dodasz średnik do ciągu znaków w tablicy (tj. A; b; c staje się a; b; c;), możesz dopasować za pomocą „x;” bez względu na to, w jakiej pozycji się znajduje:
źródło
bFound jest ustawiony na true, jeśli szukany ciąg znaków jest dopasowany do dowolnego elementu „linii” tablicy.
źródło
Spróbuj tego
Zwróci ci linię z pierwszą częstotliwością szukanego tekstu.
źródło
Jeśli
stringArray
zawiera dużą liczbę łańcuchów o różnej długości, rozważ użycie Trie do przechowywania i przeszukiwania tablicy ciągów.Oto implementacja
Trie
klasyJeśli wszystkie ciągi
stringArray
mają taką samą długość, lepiej będzie użyć po prostuHashSet
zamiast aTrie
źródło
Proste rozwiązanie, nie wymaga żadnego linq
String.Join (",", array) .Contains (Value + ",");
źródło
źródło
Spróbuj tego, nie potrzebujesz pętli ..
źródło
Aby wypełnić powyższe odpowiedzi, w celu sprawdzenia IgnoreCase użyj:
źródło
W moim przypadku powyższe odpowiedzi nie zadziałały. Sprawdzałem ciąg znaków w tablicy i przypisałem go do wartości boolowskiej. Zmodyfikowałem odpowiedź @Anton Gogolev, usunąłem
Any()
metodę i wstawiłemstringToCheck
do niejContains()
metodę.źródło
Korzystanie z metod Find lub FindIndex klasy Array :
źródło
Użyłem następującego kodu, aby sprawdzić, czy ciąg zawiera którykolwiek z elementów w tablicy ciągów:
źródło
Text = "matched"
tyle razy, ilestringToCheck
zawiera podciągówstringArray
. Możesz umieścić zleceniebreak
lubreturn
po nim.Wykazano trzy opcje. Wolę znaleźć trzeci jako najbardziej zwięzły.
źródło