[英]How to check if a string starts with a capital letter in a LINQ query
我有以下代碼,我試圖獲取以大寫開頭的字符串,但我不知道如何! 沒有 linq 我可以做到,但在 LINQ 里面......不知道!
string[] queryValues1 = new string[10] {"zero", "one", "two", "three", "four", "five", "six", "seven","nine", "ten" };
string[] queryValues2 = new string[3] { "A", "b", "c" };
var queryResult =
from qResult in queryValues1
from qRes in queryValues2
where qResult.Length > 3
where qResult.Length < 5
where qRes[0].StartWithCapital //how to check if qRes started with a capital letter?
select qResult + "\t" + qRes + Environment.NewLine;
foreach (var qResult in queryResult)
{
textBox1.Text += qResult;
}
這里較早的解決方案都假設queryValues2
由其中至少包含一個字符的字符串組成。 雖然示例代碼確實如此,但不一定總是如此。
假設,相反,你有這個:
string[] queryValues2 = new string[5] { "A", "b", "c", "", null };
(例如,如果字符串數組是由調用者傳入的,則可能就是這種情況)。
直接針對qRes[0]
的解決方案將在""
上引發IndexOutOfRangeException
,在null
上引發NullReferenceException
。
因此,對於一般情況,一個更安全的替代方法是使用這個:
where !string.IsNullOrEmpty(qRes) && char.IsUpper(qRes[0])
嘗試這個:
where char.IsUpper(qRes[0])
檢查Char.IsUpper(qRes[0])
。
where Char.IsUpper(qRes.FirstOrdefault())
它與 LINQ 外部相同。
static void Main(string[] args)
{
Console.Write("\nLINQ : Find the uppercase words in a string : ");
Console.Write("\n----------------------------------------------\n");
string strNew;
Console.Write("Input the string : ");
strNew = Console.ReadLine();
//string[] newStr = strNew.Split(' ');
var ucWord = WordFilt(strNew);
Console.Write("\nThe UPPER CASE words are :\n ");
foreach (string strRet in ucWord)
{
Console.WriteLine(strRet);
}
Console.ReadLine();
}
static IEnumerable<string> WordFilt(string mystr)
{
var upWord = mystr.Split(' ')
.Where(x=> !string.IsNullOrEmpty(x) && char.IsUpper(x[0]));
return upWord;
}
嘗試這樣的事情(在這段代碼中 arr 是一個字符串 []):
from a in arr
where ((int)a.ToCharArray()[0] >= 65 && (int)a.ToCharArray()[0] <= 90)
select a
要點是檢查第一個字符的 ASCII 值是否在大寫字母范圍內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.