使用C#检查字符串是否包含字符串数组中的字符串

The*_*max 266 c# arrays string search

我想使用C#来检查字符串值是否包含字符串数组中的单词.例如,

string stringToCheck = "text1text2text3";

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

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

}
Run Code Online (Sandbox Code Playgroud)

如何检查'stringToCheck'的字符串值是否包含数组中的单词?

Ant*_*lev 799

这是如何做:

if(stringArray.Any(stringToCheck.Contains))
/* or a bit longer: (stringArray.Any(s => stringToCheck.Contains(s))) */
Run Code Online (Sandbox Code Playgroud)

这将检查是否stringToCheck包含任何一个子字符串stringArray.如果要确保它包含所有子字符串,请更改AnyAll:

if(stringArray.All(stringToCheck.Contains))
Run Code Online (Sandbox Code Playgroud)

  • 自我注意:linq很棒,linq很棒,linq很棒!要开始使用linq. (109认同)
  • 如果您正在使用框架2.0 ...那么您不能使用linq (10认同)
  • @Offler那将是`stringArray.Any(s => s.IndexOf(stringToCheck,StringComparison.CurrentCultureIgnoreCase)> -1)` (10认同)
  • 如何获取数组中匹配的项目? (3认同)
  • 可以通过.NET 2.0 http://www.albahari.com/nutshell/linqbridge.aspx上的LinqBridge使用@Spooks Linq To Objects(在答案的字符串检查中使用)。 (2认同)

Abd*_*oof 134

这是你如何做到的:

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

更新:可能您正在寻找更好的解决方案..请参阅下面的@Anton Gogolev的答案,其中使用了LINQ.

  • 不要使用这个答案而是使用LINQ (61认同)
  • 对于没有看到**的人来说很少注意**在字符串数组上包含**方法:检查你是否有"使用System.Linq;" 代码文件中的命名空间:) (11认同)
  • 我做了if(stringArray.Contains(stringToCheck))并且它工作得很好,谢谢. (5认同)
  • 传统软件中并不总是提供Linq. (5认同)
  • 谢谢,我修改了你的代码:if(stringToCheck.Contains(s))并且它有效. (3认同)

小智 39

试试这个:

无需使用LINQ

if (Array.IndexOf(array, Value) >= 0)
{
    //Your stuff goes here
}
Run Code Online (Sandbox Code Playgroud)

  • 这根本不能解决问题.IndexOf告诉您数组是否包含字符串的完全匹配,原始问题是字符串是否包含Linq处理的字符串数组之一. (20认同)
  • @Blacky Wolf,你读过这个问题吗?Array.IndexOf告诉您数组是否包含值,OP想知道某个值是否包含数组的任何成员,与此答案完全相反.您可以将String.IndexOf与Linq一起使用:`stringArray.Any(w => stringToCheck.IndexOf(w)> = 0)`但使用String.Contains的Linq答案更有意义,因为这正是要求的内容. (3认同)

Leg*_*s21 37

只需使用linq方法:

stringArray.Contains(stringToCheck)
Run Code Online (Sandbox Code Playgroud)

(抱歉无法在现有答案上添加评论,因为我的声誉<50)

  • 这个答案是问题的后退. (11认同)
  • 注意,Contains是一个扩展方法,你需要`使用System.Linq;` (4认同)
  • 这个答案怎么被点赞了这么多次?提出问题5年后,解决方案基本上与问题所问的相反。 (2认同)

lwi*_*win 8

最简单和样本方式.

  bool bol=Array.Exists(stringarray,E => E == stringtocheck);
Run Code Online (Sandbox Code Playgroud)


小智 6

string strName = "vernie";
string[] strNamesArray = { "roger", "vernie", "joel" };

if (strNamesArray.Any(x => x == strName))
{
   // do some action here if true...
}
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这是问题的所在。 (2认同)

Fre*_*son 5

也许这样的东西:

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!");
}
Run Code Online (Sandbox Code Playgroud)