检查字符串列表中是否存在字符串的单词

时间:2016-10-19 08:57:46

标签: c# string linq list contains

我有以下代码可以处理 -

List<string> test = new List<string>();
test.Add("cat");

if (test.Any(str => str.Contains("cat")))
{
      // do something
};

但是有一种方法可以检查是否存在完全匹配的实例 -

if (test.Any(str => str.Contains("the cat sat")))
{
      // do something
};

我希望能够检查列表中是否存在字符串中的任何字样。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:5)

您应该在test

的元素中提取单词并检查它们是否存在
var data = "the cat sat";
var words = data.Split(null);
if (test.Any(str => words.Any(word => str.Contains(word)))
{
  // do something
}

如果您想检查完全匹配,请使用word => str == word

"a cat".Contains("cat") //true
"a cat" == "cat" //false

答案 1 :(得分:4)

你可以这样做

string check = "the cat sat";
if(test.Any(str => check.Split(' ').Contains(str)))
{
      // present
};

答案 2 :(得分:4)

Split你的句子变成了不同的词:

var words = new HashSet<string>("the cat sat".Split(' '));

然后你可以:

  1. 检查该集合是否包含任何str s:

    var test = new List<string> { "cat" };
    var words = new HashSet<string>("the cat sat".Split(' '));
    
    var result =  test.Any(str => words.Contains(str)); // In this case "true"
    
  2. 使用Intersect

    var test = new List<string> { "cat" };
    var words = new HashSet<string>("the cat sat".Split(' '));
    
    var result = test.Intersect(words).Any();
    
  3. 使用HashSet是这样的,当您浏览o(n)而不是o(n)2

    中的2个馆藏时

    如果您在test列表中没有完全匹配,如下例所示:

    var test = new List<string> { "some cat" };
    

    然后你可以这样做:

    var test = new List<string> { "some cat" };
    var words = "the cat sat".Split(' ').ToList();
    
    var result = words.Any(word => test.Any(item => item.Contains(word)));
    

答案 3 :(得分:2)

实现这一目标的一种方法是使用string对象的扩展名。

public static bool Contains(this string input, bool caseSensitive, params string[] items)
{
    input = !caseSensitive ? input.ToLower() : input;

    foreach (var item in items)
    {
        if (input.Contains(!caseSensitive ? item.ToLower() : item))
            return true;
    }

    return false;
}

您的以下行也可以进行微小的更改:

if (test.Any(str => str.Contains(true, "the", "cat", "sat"))) // true for case sensitive contains
{
      // do something
};

答案 4 :(得分:1)

bool contains = false;        
string checkString = "the cat sat";
checkString.Split(' ').ToList().Foreach(x => {
  if (test.Any(str => str.Contains(x)) && !contains)
  {
      // do something
      contains = true;
  };
});