簡體   English   中英

如何在 LINQ 查詢中檢查字符串是否以大寫字母開頭

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM