如何检查字符串是否以LINQ查询中的大写字母开头

时间:2011-12-18 01:22:26

标签: c# linq

我有以下代码,我试图获得以资本开头的字符串,但我不知道如何!没有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;
        }

6 个答案:

答案 0 :(得分:8)

此处的早期解决方案都假设queryValues2由至少包含一个字符的字符串组成。虽然示例代码也是如此,但它并不总是正确的。

假设你有这个:

string[] queryValues2 = new string[5] { "A", "b", "c", "", null };

(例如,如果字符串数组由调用者传入,则可能就是这种情况。)

直接针对qRes[0]的解决方案会在IndexOutOfRangeException上提出"",在NullReferenceException上提出null

因此,对于一般情况,更安全的替代方案是使用它:

where !string.IsNullOrEmpty(qRes) && char.IsUpper(qRes[0])

答案 1 :(得分:6)

试试这个:

where char.IsUpper(qRes[0])

答案 2 :(得分:3)

检查Char.IsUpper(qRes[0])

答案 3 :(得分:1)

where Char.IsUpper(qRes.FirstOrdefault())

它与LINQ外部相同。

答案 4 :(得分:0)

尝试这样的事情(在这段代码中arr是一个字符串[]):

from a in arr
                    where ((int)a.ToCharArray()[0] >= 65 && (int)a.ToCharArray()[0] <= 90)
                    select a

要点是检查第一个字符的ASCII值是否在大写字母范围内。

答案 5 :(得分:0)

   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;

    }