有这个变种吗?
if (blabla.Contains("I'm a noob") | blabla.Contains("sry") | blabla.Contains("I'm a noob "+"sry"))
{
//stuff
}
像:
if (blabla.Contains("I'm a noob) and/or ("sry")
{
//stuff
}
非常感谢帮助!
答案 0 :(得分:2)
根据你的要求,你不能完全崩溃,但你可以这样做:
if (blabla.Contains("I'm a noob") || blabla.Contains("sry"))
{
//stuff
}
"和" case在这里处理,因为带有两者的字符串实际上会传递"或"中的两个语句。
答案 1 :(得分:1)
var arr = new[]{"I'm a noob" ,"sry", "I'm a noob +sry"};
if(arr.Any(x => blabla.Contains(x)))
{
}
答案 2 :(得分:0)
您可以使用正则表达式:
Regex r = new Regex("I'm a noob|sry|I'm a noob sry");
if(r.IsMatch(blabla)) {
//TODO: do something
}
正则表达式具有其他高级功能,例如:a*
与空字符串匹配,a
,aa
,aaa
,...
有趣的是,如果你“编译”正则表达式(例如使用new Regex("I'm a noob|sry|I'm a noob sry",RegexOptions.Compiled)
,C#会自动将其转换为最快的解决方案机制。例如,如果blabla
是一个100k字符串,你只会在整个字符串上运行一次。例如I'm a noob sry
等冗余部分将被自动省略。
答案 3 :(得分:0)
据我所知,没有内置方法可以做到这一点。但是使用一些LINQ和扩展方法,您可以创建自己的方法来检查字符串是否包含任何或所有标记:
public static class ExtensionMethods{
public static bool ContainsAny(this string s, params string[] tokens){
return tokens.Any(t => s.Contains(t));
}
public static bool ContainsAll(this string s, params string[] tokens){
return tokens.All(t => s.Contains(t));
}
}
你可以像这样使用它(请记住,params数组采用可变数量的参数,所以你不仅限于我的例子中的两个):
var str = "this is a string";
Console.WriteLine(str.ContainsAny("this", "fake"));
Console.WriteLine(str.ContainsAny("doesn't", "exist"));
Console.WriteLine(str.ContainsAll("this", "is"));
Console.WriteLine(str.ContainsAll("this", "fake"));
输出:
真
假
真
假
编辑:
为了记录,LINQ不是必需的。你可以这样轻易地写出来:
public static class ExtensionMethods{
public static bool ContainsAny(this string s, params string[] tokens){
foreach(string token in tokens)
if(s.Contains(token)) return true;
return false;
}
public static bool ContainsAll(this string s, params string[] tokens){
foreach(string token in tokens)
if(!s.Contains(token)) return false;
return true;
}
}