c#不包含多个单词

时间:2013-07-26 16:46:05

标签: c# contains

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

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

e.g。 如果string是

,则返回true
    Word1Word2

返回false

    Word1 Text Word2

3 个答案:

答案 0 :(得分:16)

只需验证每个字都包含在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))

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

您可以使用&&运算符:

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

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

var ind1 = r.IndexOf("Word1");
var ind2 = r.IndexOf("Word2");
if (ind1 >= 0 && ind2 > ind1) {
    ...
}