比较字符串和数组 c#

7

如何编写一个函数来判断字符串是否包含数组中的任何元素,如果包含则返回 true

类似于以下代码:

string str = "hi how are you";
string[] words = {"hi", "hey", "hello"};

将返回true


2
foreach + String.IndexOf - zerkms
4个回答

9
你可以这样做:
var array = new[] {"quick", "brown", "fox"};
var myString = "I love foxes.";
if (array.Any(s => myStr.IndexOf(s) >= 0)) {
    // One of the elements is there
}

这种方法不需要元素是一个完整的单词(例如,上面的片段将返回true,即使单词"fox"没有作为单个单词出现)。


1
或者如果你不介意为了更容易阅读而失去一些效率: if (array.Any(s => myStr.Contains(s)) { 同样可以,我相信。 - Jeff
谢谢,这正是我在寻找的!同时感谢 Mr_Green 帮我修复了糟糕的格式 :) 还有,更改为不区分大小写容易吗? - user1852287
2
@user1852287 是的 - 使用 myStr.IndexOf(s, StringComparison.OrdinalIgnoreCase) 来实现不区分大小写。 - Sergey Kalinichenko
7
更简洁的写法:bool b = words.Any(str);,意思是判断字符串数组中是否有任何一个字符串包含给定的字符串。 - M.Stramm

0
你可以使用 Enumerable.Intersect 来分割字符串。对于长字符串来说,它比 Any + IndexOf 更高效。
var any = words.Intersect(str.Split()).Any();

@user18522877,这假设你要查找的是整个单词而不是子字符串,所以在像dasblinkenlight这样的示例中,它会返回“false” - 这可能是你要找的,但如果是的话,你应该考虑修改你的问题。 - Jeff

0

不需要循环,这里有一种更快的方法:

   string [] arr = {"One","Two","Three"};
   var target = "One";
   var results = Array.FindAll(arr, s => s.Equals(target));

0

我认为你需要检查一个字符串是否包含在另一个字符串中(我不知道性能如何)

foreach(string strLine in words)
 {
    if(strLine.Contains(str)) //or str.Contains(strLine)
    {
      return true;
    }
 }
 //return false;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接