List <string>中的任何项都包含单独字符串的一部分

时间:2017-09-28 22:46:12

标签: c# .net string linq

我们说List<string>看起来像这样:

  • 苹果
  • 梅花

然后在一个字符串中,如果我有:

I would like to eat a pear today

(忽略大小写。)在这种情况下,我想要true,因为在列表和字符串中都找到pear。但如果我有一个字符串:

I would like to eat a strawberry today

然后我会得到false,因为在句子中找不到List<string>'s

我一直在玩各种各样的事情:

string result = Fruits.FirstOrDefault(s => s.IndexOf(sentence) > 0);

其中FruitsList<string>sentence是另一个字符串。没有钉它。

4 个答案:

答案 0 :(得分:2)

试试这个:

bool result = Fruits.Any(s => sentence.ToLower().Contains(s.ToLower()));

bool result = Fruits.Any(s => sentence.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) >= 0);

答案 1 :(得分:1)

你需要以这种方式检查=&gt;

string result = Fruits.Any(s => sentence.IndexOf(s) > -1);

string result = Fruits.Any(s => sentence.Contains(s));

答案 2 :(得分:1)

如果您对其他方法持开放态度,可以使用以下方法完成:

public static bool ListItemInString(List<string> listOfStrings, string stringToCheck) {
    foreach(string str in listOfStrings) {
        if (stringToCheck.ToUpper().Contains(str.ToUpper())) {
            // return true if any of the list items are found in stringToCheck
            return true;
        }
    }
    // if the method has not returned true by this point then we return false
    // to indicate none of the list items were found within the string
    return false;
}

此方法遍历您的列表并根据您指定的字符串检查每个项目。如果在foreach循环中的任何一点它发现你的一个列表项包含在字符串中,它将返回try,否则它将返回false。它还会在执行搜索字符串之前将两个字符串转换为大写字符,从而考虑您的非大小写敏感请求。

编辑:我知道这更像是一种手动方法。如果这是一个多次执行的操作,那么此帖子的先前答案可以类似地用于提高代码可读性的方法。

答案 3 :(得分:1)

根据最初的问题,如果你在句子中寻找匹配的字符串而不是布尔结果,则代码应该有用:

List<string> Fruits = new List<string> { "Apple", "Pear", "Peach", "Plum" };
var sentence = "I would like to eat a pear and apple today";
var sentenceLower = sentence.ToLower(); 
var delimiter = ",";
var match = Fruits
  .Where(s => sentenceLower.Contains(s.ToLower()))
  .Aggregate((i, j) => i + delimiter + j);