C#中如何判断字符串是否包含多个值

5

早上好,

在一个if语句中,如果我们想检查一个字符串是否包含某个值,我们可以使用:

if (string.Contains("Value1"))    
{    
}    

我们如何在if语句中比较字符串与更多的值而不必反复编写整个语句?例如,为了避免下面的语句:
if ((string.Contains("Value1") && (string.Contains("Value2")) && (string.Contains("Value3")))    
{    
}

谢谢你。

感谢您

5个回答

7

所以,基本上,您想检查字符串中是否包含所有的值。幸运的是(借助LINQ的帮助),这几乎可以直接翻译成C#:

var values = new String[] {"Value1", "Value2", "Value3"};

if (values.All(v => myString.Contains(v))) {
    ...
}

同样地,如果你想检查字符串中是否包含任何值,你需要用Any替换All

3

好的,您可以使用LINQ:

string[] requiredContents = { "Foo", "Bar", "Baz" };

if (requiredContents.All(x => text.Contains(x))
{
    ...
}

请注意,与短路&&运算符一样,All操作符在找到不满足条件的值时会停止。(如果您想在其他地方以类似的方式使用Any,那么它会在找到满足条件的值时停止。)
我认为对于只有相当少量元素的情况,这并不重要。去掉多余的括号后,这并不那么糟糕:
if (text.Contains("foo") && text.Contains("bar") && text.Contains("Baz"))
{
}

我只会在以下两种情况下开始使用更一般的形式:一是存在相当多的值(我可能会将界限划定在大约5个左右),二是该值集作为参数传递或以其他方式变化。


1

由于您需要“您”的字符串包含所有值:

var values = new String[] {"Value1", "Value2", "Value3"};
var s = yourString;

if (values.Count(v => s.Contains(v)) == values.Length) {
    ...
}

2
为什么你已经找到一个不匹配的,还想继续寻找呢? - Jon Skeet

1

这是最好的解决方案吗?可能不是。但它易读且可扩展,是一个不错的选择。

var matches = {"string1", "string2", "string3","string-n"};
var i = 0;
foreach(string s in matches)
{
    if(mystring.Contains(s))
    {
        i++;
    }
}
if(i == matches.Length)
{
    //string contains all matches.
}

1
if(stringArray.Any(s => stringToCheck.Contains(s)))

如果您想确保它包含所有子字符串,请将 Any 更改为 All

if(stringArray.All(s => stringToCheck.Contains(s)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接