Проверьте, содержит ли строка все "?"

Как проверить, содержит ли строка все вопросительные знаки? Вот так:

string input = "????????";

Ответ 1

var isAllQuestionMarks = input.All(c => c == '?');

Ответ 2

Вы можете использовать Enumerable.All:

bool isAllQuestion = input.All(c => c=='?');

Ответ 3

        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

Ответ 4

Так много ответов linq! Не можем ли мы сделать что-то старомодное?  Это на порядок быстрее, чем решение linq. Более читабельны? Возможно, нет, но для этого нужны имена методов.

    static bool IsAllQuestionMarks(String s) {

        for(int i = 0; i < s.Length; i++)
            if(s[i] != '?')
                return false;

        return true;
    }

Ответ 5

bool allQuestionMarks = input.All(c => c == '?');

Здесь используется метод LINQ All, который "определяет, удовлетворяют ли все элементы последовательности условию". В этом случае элементы коллекции являются символами, а условие состоит в том, что символ равен знаку вопросительного знака.

Ответ 6

Не очень читаемо... Но регулярное выражение - это еще один способ сделать это (и быстро):

// Looking for a string composed only by one or more "?":
bool allQuestionMarks = Regex.IsMatch(input, "^\?+$");

Ответ 7

вы можете сделать это в linq...

bool result = input.ToCharArray().All(c => c=='?');

Ответ 8

Вы также можете попробовать следующее:

private bool CheckIfStringContainsOnlyQuestionMark(string value)
{
    return !value.Where(a => a != '?').Select(a => true).FirstOrDefault();
}