6
   if (r.Contains("Word1" + "Word2"))

此代码检查“Word1”和“Word2”是否一起在字符串中,例如它们之间没有任何内容,但是如何检查字符串是否包含这两个单词,而不管它们之间的顺序或任何其他单词?

例如,如果字符串是,则返回 true

    Word1Word2

返回假

    Word1 Text Word2
4

3 回答 3

17

只需验证每个单词都包含在r.

if (r.Contains("Word1") && r.Contains("Word2"))

此代码检查原始字符串中是否存在"Word1" AND "Word2",无论其在字符串中的相对位置。

编辑:

正如@Alexei Levenkov (+1) 在他的评论中所指出的,使用方法可以达到相同的解决方案IndexOf

if (r.IndexOf("Word1", StringComparison.InvariantCultureIgnoreCase) > -1 
    && r.IndexOf("Word2", StringComparison.InvariantCultureIgnoreCase) > -1))
于 2013-07-26T16:47:07.023 回答
10

检查每个单词是否包含在字符串中:

if (r.Contains("Word1") && r.Contains("Word2")))

如果这是您经常做的事情,您可以通过制作扩展方法来提高可读性(IMO)和简洁性:

public static bool ContainsAll(this string source, params string[] values)
{
    return values.All(x => source.Contains(x));
}

像这样使用:

"Word1 Text Word2".ContainsAll("Word1", "Word2") // true
于 2013-07-26T17:00:46.843 回答
4

您可以为此使用&&运算符:

if (r.Contains("Word1") &&  r.Contains("Word2"))

请注意,这将检查两个单词是否以任何顺序存在。如果必须确保第一个单词在第二个之前,请获取每个单词的索引,并检查第一个单词的索引是否低于第二个单词的索引:

var ind1 = r.IndexOf("Word1");
var ind2 = r.IndexOf("Word2");
if (ind1 >= 0 && ind2 > ind1) {
    ...
}
于 2013-07-26T16:47:02.987 回答