Использование C # для проверки, содержит ли строка строку в массиве строк - PullRequest
247 голосов
/ 26 мая 2010

Я хочу использовать C #, чтобы проверить, содержит ли строковое значение слово в строковом массиве. Например,

string stringToCheck = "text1text2text3";

string[] stringArray = { "text1", "someothertext", etc... };

if(stringToCheck.contains stringArray) //one of the items?
{

}

Как проверить, содержит ли строковое значение для 'stringToCheck' слово в массиве?

Ответы [ 26 ]

768 голосов
/ 26 мая 2010

Вот как:

if(stringArray.Any(stringToCheck.Contains))
/* or a bit longer: (stringArray.Any(s => stringToCheck.Contains(s))) */

Проверяет, содержит ли stringToCheck одну из подстрок из stringArray. Если вы хотите убедиться, что он содержит все подстроки, измените Any на All:

if(stringArray.All(stringToCheck.Contains))
125 голосов
/ 26 мая 2010

вот как вы можете это сделать:

string stringToCheck = "text1";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
foreach (string x in stringArray)
{
    if (stringToCheck.Contains(x))
    {
        // Process...
    }
}

ОБНОВЛЕНИЕ: Может быть, вы ищете лучшее решение ... обратитесь к ответу @Anton Gogolev, который использует LINQ.

36 голосов
/ 02 июля 2013

Попробуйте это:

Нет необходимости использовать LINQ

if (Array.IndexOf(array, Value) >= 0)
{
    //Your stuff goes here
}
31 голосов
/ 01 сентября 2015

Просто используйте метод linq:

stringArray.Contains(stringToCheck)
8 голосов
/ 02 ноября 2016

Самый простой и типовой способ.

  bool bol=Array.Exists(stringarray,E => E == stringtocheck);
6 голосов
/ 18 апреля 2016
string strName = "vernie";
string[] strNamesArray = { "roger", "vernie", "joel" };

if (strNamesArray.Any(x => x == strName))
{
   // do some action here if true...
}
5 голосов
/ 26 мая 2010

Что-то вроде этого возможно:

string stringToCheck = "text1text2text3";
string[] stringArray = new string[] { "text1" };
if (Array.Exists<string>(stringArray, (Predicate<string>)delegate(string s) { 
    return stringToCheck.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1; })) {
    Console.WriteLine("Found!");
}
3 голосов
/ 24 августа 2012

Использование Linq и группы методов было бы самым быстрым и компактным способом сделать это.

var arrayA = new[] {"element1", "element2"};
var arrayB = new[] {"element2", "element3"};
if (arrayB.Any(arrayA.Contains)) return true;
2 голосов
/ 04 апреля 2018

Вы можете определить свои собственные методы string.ContainsAny() и string.ContainsAll().В качестве бонуса я даже добавил метод string.Contains(), который позволяет проводить сравнение без учета регистра и т. Д.

public static class Extensions
{
    public static bool Contains(this string source, string value, StringComparison comp)
    {
        return source.IndexOf(value, comp) > -1;
    }

    public static bool ContainsAny(this string source, IEnumerable<string> values, StringComparison comp = StringComparison.CurrentCulture)
    {
        return values.Any(value => source.Contains(value, comp));
    }

    public static bool ContainsAll(this string source, IEnumerable<string> values, StringComparison comp = StringComparison.CurrentCulture)
    {
        return values.All(value => source.Contains(value, comp));
    }
}

Вы можете проверить их с помощью следующего кода:

    public static void TestExtensions()
    {
        string[] searchTerms = { "FOO", "BAR" };
        string[] documents = {
            "Hello foo bar",
            "Hello foo",
            "Hello"
        };

        foreach (var document in documents)
        {
            Console.WriteLine("Testing: {0}", document);
            Console.WriteLine("ContainsAny: {0}", document.ContainsAny(searchTerms, StringComparison.OrdinalIgnoreCase));
            Console.WriteLine("ContainsAll: {0}", document.ContainsAll(searchTerms, StringComparison.OrdinalIgnoreCase));
            Console.WriteLine();
        }
    }
1 голос
/ 26 мая 2010

Попробуйте:

String[] val = { "helloword1", "orange", "grape", "pear" };
String sep = "";
string stringToCheck = "word1";

bool match = String.Join(sep,val).Contains(stringToCheck);
bool anothermatch = val.Any(s => s.Contains(stringToCheck));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...