58
4

6 回答 6

98

关于什么:

//true if it doesn't contain letters
bool result = hello.Any(x => !char.IsLetter(x));
于 2012-10-14T17:28:29.107 回答
76

用这个替换你for loop的:

errorCounter = Regex.Matches(yourstring,@"[a-zA-Z]").Count;

记得使用Regex类,你必须using System.Text.RegularExpressions;在你的导入

于 2012-10-14T17:31:00.743 回答
24

您可以使用正则表达式:

Regex.IsMatch(hello, @"^[a-zA-Z]+$");

如果你不喜欢这样,你可以使用 LINQ:

hello.All(Char.IsLetter);

或者,您可以遍历字符,并使用 isAlpha:

Char.IsLetter(character);
于 2012-10-14T17:23:01.277 回答
7
于 2012-10-14T17:22:31.793 回答
4

对于最小的变化:

for(int i=0; i<str.Length; i++ )
   if(str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z')
      errorCount++;

您可以使用正则表达式,至少如果速度不是问题并且您并不真正需要实际的确切计数。

于 2012-10-14T17:24:13.770 回答
3

使用正则表达式无需将其转换为 char 数组

if(Regex.IsMatch("yourString",".*?[a-zA-Z].*?"))
{
errorCounter++;
}
于 2012-10-14T17:23:30.220 回答