2

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

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

谢谢。

4

7 回答 7

1

要单独解决异常,请不要解析字符串。您可以直接将 achar与任何ushort值进行比较。

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

str[0] > 65

AsciiTable.com应该向您展示为什么您的检查会在边缘失败。

还要考虑...

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

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

注意——这些都是假设 ASCII,我的链接很明显。

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

于 2012-10-18T17:21:09.143 回答
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;
}
于 2012-10-18T17:05:48.037 回答
1

我假设你想要做的int.Parse(str[0].ToString())是获取 ASCII 值。

你需要使用的是这个(int)str[0]

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

于 2012-10-18T17:04:23.703 回答
1

您正在尝试将 a 解析charint,而不是将其转换为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;
于 2012-10-18T17:02:05.643 回答
0

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

首先,即使所有字母都是大写字母,它也会为像“ABC123”这样的字符串返回 false。其次,有许多国家字符不在 65..90 范围内,即使它们是大写字母。您应该(如果可以)使用一些 Char 方法 http://msdn.microsoft.com/en-us/library/d1x97616.aspx

于 2012-10-18T17:12:59.020 回答
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());
于 2021-01-22T14:46:32.840 回答
-3
public static bool IsCapital(string str)
{
 return !Regex.IsMatch(str, "[a..z]");
}
于 2012-10-18T17:04:24.400 回答