[英]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.