检查字符串中的所有字母是否都是递归的大写字母

时间:2012-10-18 17:00:07

标签: c# string recursion

我必须检查递归中所有字母是否都是大写字母,我不知道为什么这不起作用:

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"));

感谢。

7 个答案:

答案 0 :(得分:1)

您尝试将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;

答案 1 :(得分:1)

我假设您尝试使用int.Parse(str[0].ToString())来获取ASCII值。

您需要使用的是(int)str[0]

解析将尝试将字符串转换为数字,因此值为“412”的字符串将被解析为值为412的int。

答案 2 :(得分:1)

  

我必须检查递归中所有字母是否都是大写字母

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;
}

答案 3 :(得分:1)

要仅解决异常,请不要解析字符串。您可以直接将char与任意ushort值进行比较。

换句话说,这是一个有效的检查(没有字符串解析)

str[0] > 65

AsciiTable.com应该告诉你为什么你的支票会在边缘失败。

还要考虑......

  • 不是字母的字符。
  • IsCapital(null)

最后,可能使这更容易的事情(假设绕过非字母)是创建一个bool IsNotLowerCase(char c)行的方法。

注意 - 这些都是ASCII,我的链接就是明证。

如果您必须支持完整的Unicode,希望您可以使用methods of char

答案 4 :(得分:0)

我认为,这个数字比较是行不通的。

首先,即使所有字母都是大写字母,它也会像“ABC123”一样返回false。第二,即使它们是首都,也有许多国家角色不属于65..90。你应该(如果可以的话)使用一些Char方法 http://msdn.microsoft.com/en-us/library/d1x97616.aspx

答案 5 :(得分:0)

虽然有很多方法可以给这只猫剥皮,但我更喜欢将这些代码包装到可重用的扩展方法中,这样以后的工作就变得微不足道了。使用扩展方法时,您还可以避免使用 RegEx,因为它比直接字符检查慢。我喜欢使用 Extensions.cs NuGet 包中的扩展。它使这项检查变得如此简单:

  1. 将 [https://www.nuget.org/packages/Extensions.cs][1] 包添加到您的项目中。
  2. 在代码顶部添加“using Extensions;”。
  3. "smith".IsUpper() 将返回 False 而 "SMITH".IsUpper() 将返回 True。 4. 其余代码中的所有其他检查都只是MyString.IsUpper()

您的示例代码将变得如此简单:

using Extensions;

//Console.WriteLine(IsCapital("abc"));
Console.WriteLine("abc".IsUpper());

答案 6 :(得分:-3)

public static bool IsCapital(string str)
{
 return !Regex.IsMatch(str, "[a..z]");
}