我们说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);
其中Fruits
是List<string>
,sentence
是另一个字符串。没有钉它。
答案 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);