[英]Check if all the letters in a string are capital recursively
我必须检查递归中的所有字母是否都是大写字母,我不知道为什么这不起作用:
public static bool IsCapital(string str)
{
if (str.Length == 1)
return int.Parse(str[0].ToString()) > 65 && int.Parse(str[0].ToString()) < 90;
return IsCapital(str.Substring(1)) && int.Parse(str[0].ToString()) > 65 && int.Parse(str[0].ToString()) < 90;
}
它崩溃并说:“未处理的异常:System.FormatException:输入字符串的格式不正确。”
Console.WriteLine(IsCapital("abc"));
谢谢。
您正在尝试将char
解析为int
,而不是将其转换为int
。
您正在做的是获取一个字母,例如A
,并将其解析为一个 int。 A 无论如何都不是数字,因此解析失败。
您要做的是将 char 显式转换为 int 以获得您要查找的 ASCII 值:
if (str.Length == 1)
{
return ((int)str[0]) > 65
&& ((int)str[0]) < 90;
}
return IsCapital(str.Substring(1))
&& ((int)str[0]) > 65
&& ((int)str[0]) < 90;
我假设您尝试使用int.Parse(str[0].ToString())
来获取 ASCII 值。
你需要使用的是这个(int)str[0]
解析将尝试将字符串转换为数字,因此值为“412”的字符串将被解析为值为 412 的整数。
我必须检查是否所有字母都是递归的大写字母
public static bool IsCapital(string str)
{
if (String.IsNullOrEmpty(str)) return false;
if (str.Length == 1 && char.IsUpper(str[0])) return true;
return char.IsUpper(str[0]) ? IsCapital(str.Substring(1)) :false;
}
要单独解决异常,请不要解析字符串。 您可以直接将char
与任何ushort
值进行比较。
换句话说,这是一个有效的检查(没有字符串解析)
str[0] > 65
AsciiTable.com应该向您展示为什么您的检查会在边缘处失败。
还要考虑...
IsCapital(null)
最后,可能使这更容易(假设绕过非字母)的方法是创建一个bool IsNotLowerCase(char c)
的方法。
注意——这些都假设为 ASCII,正如我的链接所证明的那样。
如果你必须支持完整的 Unicode,希望你可以使用char
的方法。
我认为,这种数字比较是行不通的。
首先,即使所有字母都是大写,它也会为像“ABC123”这样的字符串返回 false。 其次,有许多国家字符不属于 65..90 范围,即使它们是大写字母。 你应该(如果可以的话)使用一些 Char 方法http://msdn.microsoft.com/en-us/library/d1x97616.aspx
虽然有很多方法可以给这只猫换皮,但我更喜欢将此类代码包装到可重用的扩展方法中,这样可以让以后的工作变得微不足道。 使用扩展方法时,您还可以避免使用 RegEx,因为它比直接字符检查慢。 我喜欢使用 Extensions.cs NuGet 包中的扩展。 它使此检查变得如此简单:
using Extensions;
”添加到代码的顶部。"smith".IsUpper()
将返回 False,而"SMITH".IsUpper()
将返回 True。 4. 其余代码中的所有其他检查都只是MyString.IsUpper()
。您的示例代码将变得如此简单:
using Extensions;
//Console.WriteLine(IsCapital("abc"));
Console.WriteLine("abc".IsUpper());
public static bool IsCapital(string str)
{
return !Regex.IsMatch(str, "[a..z]");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.