Как проверить, содержит ли строка все вопросительные знаки? Вот так:
string input = "????????";
Как проверить, содержит ли строка все вопросительные знаки? Вот так:
string input = "????????";
var isAllQuestionMarks = input.All(c => c == '?');
Вы можете использовать Enumerable.All:
bool isAllQuestion = input.All(c => c=='?');
string = "????????";
bool allQuestionMarks = input == new string('?', input.Length);
Просто проверил сравнение:
этот путь представляет собой кучи x быстрее, чем 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 way 4189
Так много ответов linq! Не можем ли мы сделать что-то старомодное? Это на порядок быстрее, чем решение linq. Более читабельны? Возможно, нет, но для этого нужны имена методов.
static bool IsAllQuestionMarks(String s) {
for(int i = 0; i < s.Length; i++)
if(s[i] != '?')
return false;
return true;
}
bool allQuestionMarks = input.All(c => c == '?');
Здесь используется метод LINQ All
, который "определяет, удовлетворяют ли все элементы последовательности условию". В этом случае элементы коллекции являются символами, а условие состоит в том, что символ равен знаку вопросительного знака.
Не очень читаемо... Но регулярное выражение - это еще один способ сделать это (и быстро):
// Looking for a string composed only by one or more "?":
bool allQuestionMarks = Regex.IsMatch(input, "^\?+$");
вы можете сделать это в linq...
bool result = input.ToCharArray().All(c => c=='?');
Вы также можете попробовать следующее:
private bool CheckIfStringContainsOnlyQuestionMark(string value)
{
return !value.Where(a => a != '?').Select(a => true).FirstOrDefault();
}