Как мне подсчитать количество пробелов в начале строки в С#?
Пример:
" this is a string"
и результат будет 4. Не знаете, как это сделать правильно.
Спасибо.
Как мне подсчитать количество пробелов в начале строки в С#?
Пример:
" this is a string"
и результат будет 4. Не знаете, как это сделать правильно.
Спасибо.
Используйте Enumerable.TakeWhile
, Char.IsWhiteSpace
и Enumerable.Count
int count = str.TakeWhile(Char.IsWhiteSpace).Count();
Обратите внимание, что не только " "
- это пробел но:
Символы пробела следующие символы Юникода:
Вы можете использовать LINQ, потому что string
реализует IEnumerable<char>
:
var numberOfSpaces = input.TakeWhile(c => c == ' ').Count();
input.TakeWhile(c => c == ' ').Count()
Или
input.Length - input.TrimStart(' ').Length
Попробуйте следующее:
static void Main(string[] args)
{
string s = " this is a string";
Console.WriteLine(count(s));
}
static int count(string s)
{
int total = 0;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == ' ')
total++;
else
break;
}
return total;
}
Хотя мне нравятся ответы Linq на основе здесь скучного небезопасного метода, который должен быть довольно быстрым
private static unsafe int HowManyLeadingSpaces(string input)
{
if (input == null)
return 0;
if (input.Length == 0)
return 0;
if (string.IsNullOrWhiteSpace(input))
return input.Length;
int count = 0;
fixed (char* unsafeChar = input)
{
for (int i = 0; i < input.Length; i++)
{
if (char.IsWhiteSpace((char)(*(unsafeChar + i))))
count++;
else
break;
}
}
return count;
}
int count = 0, index = 0, lastIndex = 0;
string s = " this is a string";
index = s.IndexOf(" ");
while (index > -1)
{
count++;
index = s.IndexOf(" ", index + 1);
if ((index - lastIndex) > 1)
break;
lastIndex = index;
}
Console.WriteLine(count);