如何计算C#中字符串开头的空格量?
示例:
" this is a string"
,结果将是4.不确定如何正确执行此操作。
感谢。
答案 0 :(得分:22)
使用Enumerable.TakeWhile
,Char.IsWhiteSpace
和Enumerable.Count
int count = str.TakeWhile(Char.IsWhiteSpace).Count();
请注意," "
不仅是空白but:
空格字符是以下Unicode字符:
答案 1 :(得分:9)
您可以使用LINQ,因为string
实现了IEnumerable<char>
:
var numberOfSpaces = input.TakeWhile(c => c == ' ').Count();
答案 2 :(得分:5)
input.TakeWhile(c => c == ' ').Count()
或
input.Length - input.TrimStart(' ').Length
答案 3 :(得分:1)
试试这个:
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;
}
答案 4 :(得分:-1)
虽然我喜欢基于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;
}
答案 5 :(得分:-1)
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);