C# 检查字符串是否包含所有的"&引用;
如何检查字符串是否包含所有问号?像这样: 字符串输入=“???????” 您可以使用:C# 检查字符串是否包含所有的"&引用;,c#,C#,如何检查字符串是否包含所有问号?像这样: 字符串输入=“???????” 您可以使用: 你可以在林克做 bool result = input.ToCharArray().All(c => c=='?'); 这将使用,它“确定序列的所有元素是否满足条件”。在这种情况下,集合的元素是字符,条件是字符等于问号字符 var isAllQuestionMarks = input.All(c => c == '?'); 只是做了一个比较: 这样堆x比输入快 publicstaticvoid
你可以在林克做
bool result = input.ToCharArray().All(c => c=='?');
这将使用,它“确定序列的所有元素是否满足条件”。在这种情况下,集合的元素是字符,条件是字符等于问号字符
var isAllQuestionMarks = input.All(c => c == '?');
只是做了一个比较:
这样堆x比输入快代码>
publicstaticvoidmain(){
秒表w=新秒表();
字符串输入=“???????”;
w、 Start();
布尔所有问号;
对于(int i=0;i<10;++i){
allQuestionMarks=input==新字符串(“?”,input.Length);
}
w、 停止();
WriteLine(“字符串方式{0}”,w.ElapsedTicks);
w、 重置();
w、 Start();
对于(int i=0;i<10;++i){
allQuestionMarks=input.All(c=>c=='?');
}
Console.WriteLine(“Linq-way{0}”,w.ElapsedTicks);
Console.ReadKey();
}
字符串方式11
Linq way 4189那么多Linq答案!我们不能再以老式的方式做事了吗?
这比linq解决方案快一个数量级。更具可读性?也许不是,但这就是方法名的用途
static bool IsAllQuestionMarks(String s) {
for(int i = 0; i < s.Length; i++)
if(s[i] != '?')
return false;
return true;
}
static bool IsAllQuestionMarks(字符串s){
对于(int i=0;i
可读性不强。。。但a是另一种方法(而且速度很快):
您也可以尝试以下方法:
private bool CheckIfStringContainsOnlyQuestionMark(string value)
{
return !value.Where(a => a != '?').Select(a => true).FirstOrDefault();
}
你不是在测试不平等的案例——这是一个不公平的测试。你只是在检查“所有”的最坏情况-我很高兴你能纠正它。只要把测试做得更好,把结果放进去就行了in@Reed,您在哪里看到否定检查?“All”在第一个不匹配的元素上失败。@macias:是的,但他正在检查一个字符串,它永远不会提前失败。他的测试总是为所有人创建“最坏情况”的场景。@Reed,Preet(不是“他”)测试匹配情况下的字符串相等性,这也是字符串比较的最坏情况。定义fast,因为我认为它不比linq解决方案快,但不具有可读性。定义:足够快。我不是在比较regex和linq,我只是在展示另一种方式。我不确定linq是否更可读——或者你是说linq,一个功能性的单元dsl,比正则表达式更容易理解…?:-)对我来说,它们都有着相似的特点:易于书写,在你写完之后就不那么容易理解了。
string = "????????";
bool allQuestionMarks = input == new string('?', input.Length);
public static void Main() {
Stopwatch w = new Stopwatch();
string input = "????????";
w.Start();
bool allQuestionMarks;
for (int i = 0; i < 10; ++i ) {
allQuestionMarks = input == new string('?', input.Length);
}
w.Stop();
Console.WriteLine("String way {0}", w.ElapsedTicks);
w.Reset();
w.Start();
for (int i = 0; i < 10; ++i) {
allQuestionMarks = input.All(c => c=='?');
}
Console.WriteLine(" Linq way {0}", w.ElapsedTicks);
Console.ReadKey();
}
static bool IsAllQuestionMarks(String s) {
for(int i = 0; i < s.Length; i++)
if(s[i] != '?')
return false;
return true;
}
// Looking for a string composed only by one or more "?":
bool allQuestionMarks = Regex.IsMatch(input, "^\?+$");
private bool CheckIfStringContainsOnlyQuestionMark(string value)
{
return !value.Where(a => a != '?').Select(a => true).FirstOrDefault();
}