【问题标题】:How to check first character of a string if a letter, any letter in C#如何检查字符串的第一个字符是否是字母,C#中的任何字母
【发布时间】:2011-04-03 09:20:12
【问题描述】:

我想取一个字符串并检查第一个字符是否为字母,大小写无关紧要,但它不应该是特殊的,空格,换行符,任何东西。如何在 C# 中实现这一点?

【问题讨论】:

    标签: c# asp.net visual-studio


    【解决方案1】:

    试试下面的

    string str = ...;
    bool isLetter = !String.IsNullOrEmpty(str) && Char.IsLetter(str[0]);
    

    【讨论】:

    • 略短:Char.IsLetter(str.FirstOrDefault())
    • @driis 有效,但它为应该是免费分配的检查添加了几个不必要的分配
    • 谢谢大家的帮助,因为你们都帮忙了,我不知道该给谁奖励,我只是选择了已经计算出的第一胜的最高数字?不过还是谢谢大家。
    【解决方案2】:

    试试下面的

    bool isValid = char.IsLetter(name.FirstOrDefault());
    

    【讨论】:

    • 如果字符串为 null,您实际上会得到一个 System.ArgumentNullException: 'Value cannot be null.',所以 FirstOrDefault 在这里没有用处。
    【解决方案3】:
    return (myString[0] >= 'A' && myString[0] <= 'Z') || (myString[0] >= 'a' && myString[0] <= 'z')
    

    【讨论】:

    • 字母不限于 A-Z。例如,Æ 是一个丹麦字母。
    • ASCII 的时代已经一去不复返了。现在所有酷孩子都在使用 Unicode! joelonsoftware.com/articles/Unicode.html
    • 如果字符串为空会抛出异常。您需要先检查!String.IsNullOrEmpty(myString)
    【解决方案4】:

    您应该查找 ASCII 表,该表系统地将字符映射到整数值。所有小写​​字符都是连续的 (97-122),所有大写字符 (65-90) 也是如此。知道了这一点,您甚至不必转换为 int 值,只需检查字符串的第一个 char 是否在这两个范围之一(包括)内。

    【讨论】:

    • 他没有说字母仅限于 ASCII 字符集。
    • @maxstar:知道 ASCII 使用 A-Za-z 的顺序值,我更喜欢 Mark 的解决方案,因为他的解决方案避免使用幻数。您还可以调整您的解决方案以在某处定义常量以保持 97/122/65/90,但这会添加不需要的常量,因此我仍然更喜欢 Mark 的解决方案。当然,按照 JaredPar 的建议拨打 Char.IsLetter 会更好。
    • 我完全同意使用 Char.IsLetter 可能会更好。我只是建议 korben 查找 ASCII 表以了解字符不仅在网络空间中随机浮动,而且是系统地结构化并映射到数字的。我相信知道这一点比简单地获得已发布问题的答案更重要和有益,因为这提供了基本的理解。顺便说一句,我的意思正是马克所写的:当我说“在这两个范围之一内”时,我指的是字符范围,而不是整数。很抱歉造成误解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2017-10-18
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多