如何检查字符串是否包含所有问号?像这样:
string input =“????????”;
答案 0 :(得分:21)
您可以使用Enumerable.All:
bool isAllQuestion = input.All(c => c=='?');
答案 1 :(得分:16)
var isAllQuestionMarks = input.All(c => c == '?');
答案 2 :(得分:6)
string = "????????";
bool allQuestionMarks = input == new string('?', input.Length);
刚刚进行了比较:
这种方法比input.All(c => c=='?');
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();
}
字符串方式11 Linq方式4189
答案 3 :(得分:4)
这么多linq答案!我们不能再以老式的方式做任何事了吗? 这比linq解决方案快一个数量级。更具可读性?也许不是,但这就是方法名称的用途。
static bool IsAllQuestionMarks(String s) {
for(int i = 0; i < s.Length; i++)
if(s[i] != '?')
return false;
return true;
}
答案 4 :(得分:3)
bool allQuestionMarks = input.All(c => c == '?');
这使用the LINQ All
method,它“确定序列的所有元素是否满足条件。”在这种情况下,集合的元素是字符,条件是字符等于问号字符。
答案 5 :(得分:3)
不太可读......但是regular expression是另一种方法(而且速度很快):
// Looking for a string composed only by one or more "?":
bool allQuestionMarks = Regex.IsMatch(input, "^\?+$");
答案 6 :(得分:2)
你可以在linq中做到这一点......
bool result = input.ToCharArray().All(c => c=='?');
答案 7 :(得分:0)
你也可以试试这个:
private bool CheckIfStringContainsOnlyQuestionMark(string value)
{
return !value.Where(a => a != '?').Select(a => true).FirstOrDefault();
}