C# 在数组中查找字符串的一部分?

C# 在数组中查找字符串的一部分?,c#,arrays,string-search,C#,Arrays,String Search,我正在寻找一种查找某些单词的有效方法,我会使用switch/case、int/string.IndexOf(“!”);foreach循环/包含 我有一个从客户那里收到的字符串。那么,假设我得到: string x = "fjdswordslkjf?dkHEYw"; 我有一个与该消息对应的可能值数组。 (所有这些在语法上都不正确,只是为了让你有个想法): 基本上我想知道 if (x contains someWordinSomeArray) 我想使用数组中的单词搜索字符串x。在c#中,最有效

我正在寻找一种查找某些单词的有效方法,我会使用switch/case、int/string.IndexOf(“!”);foreach循环/包含

我有一个从客户那里收到的字符串。那么,假设我得到:

string x = "fjdswordslkjf?dkHEYw";
我有一个与该消息对应的可能值数组。 (所有这些在语法上都不正确,只是为了让你有个想法):

基本上我想知道

 if (x contains someWordinSomeArray)
我想使用数组中的单词搜索字符串x。在c#中,最有效的方法是什么?我只需要一个bool响应,而不是字符串中的确切位置

答复

以下是我使用的:

foreach (string searchstring in valuesArray)
        {
            indx = test.IndexOf(searchstring);
            if (indx > -1)
            {
                testValue = true;
                break;
            }             
        }

.NET framework有一个string.contains方法,可以执行您想要执行的操作。在数组中循环。对于数组中的每个项,检查x.Contains(item)是否为true


循环遍历数组,找到匹配项后立即退出:

bool found = someArray.Any(s => x.Contains(s));
相同的非LINQ版本为:

bool found = false;
foreach (string s in someArray) {
  if (x.Contains(s)) {
    found = true;
    break; // exit from loop
  }
}

您可以根据需要使用适当的扩展方法。假设输入字符串存储在
s
中,并且要检查的单词数组是
wordsToMatch
。然后:

。。。如果您想知道是否有任何单词匹配:

var stringMatched = wordsToMatch.Any(w => s.Contains(w));
// true or false
var matchingWords = wordsToMatch.Where(w => s.Contains(w));
// ["apple", "ban", "banana", "nana", "coconut", "nut", ...]
。。。如果您想知道哪些单词匹配:

var stringMatched = wordsToMatch.Any(w => s.Contains(w));
// true or false
var matchingWords = wordsToMatch.Where(w => s.Contains(w));
// ["apple", "ban", "banana", "nana", "coconut", "nut", ...]
。。。如果您想知道每个单词是否匹配:

var wordMatchResult = wordsToMatch.Select(w => s.Contains(w));
// [true, true, false, true, false, true, ...]

我认为“contains”比indexOf()快。

你会把
查找.me
归类为一个词还是两个词?你想知道
someArray
中的任何词是否在
x
中,或者
someArray
中的每个单词是否在
x
中?@thermacore:根据您的问题,这是您从客户机获得的字符串。
    bool CheckForString(string[] someArray,string x)
    {          
      foreach(string s in someArray)
        if(x.contains(s))
          return true;
      return false;
    }