我正在寻找一种寻找某些单词的有效方法,我会使用switch / case,int / string.IndexOf('!'); foreach loop / contains?
我有一个我从客户端收到的字符串。所以,让我说我得到:
string x = "fjdswordslkjf?dkHEYw";
我有一组与该消息对应的可能值。 (这些都不是语法上正确的,只是让你有所了解):
someArray[0]= "?";
someArray[1]= "HEY";
someArray[2]= "find.me";
基本上我想知道
if (x contains someWordinSomeArray)
我想使用数组中的单词搜索字符串x。在c#中最有效的方法是什么?我只需要一个bool响应,而不是字符串中的确切位置。
ANSWER
这是我用的:
foreach (string searchstring in valuesArray)
{
indx = test.IndexOf(searchstring);
if (indx > -1)
{
testValue = true;
break;
}
}
答案 0 :(得分:2)
循环遍历数组,并在找到匹配后立即退出:
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
}
}
答案 1 :(得分:1)
您可以根据需要使用适当的扩展方法。假设输入字符串存储在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 wordMatchResult = wordsToMatch.Select(w => s.Contains(w));
// [true, true, false, true, false, true, ...]
答案 2 :(得分:0)
.NET框架有一个string.contains方法,可以执行您想要执行的操作。循环遍历数组。对于数组中的每个项目,检查x.Contains(item)是否为true
http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx
string s1 = "fjdswordslkjf?dkHEYw";
foreach (String s in array)
b = s1.Contains(Array[item]); //will be T or F
答案 3 :(得分:0)
bool CheckForString(string[] someArray,string x)
{
foreach(string s in someArray)
if(x.contains(s))
return true;
return false;
}
我认为“包含”比indexOf()
更快