【问题标题】:C#: Is there a way to search a string for a number without using regex?C#:有没有办法在不使用正则表达式的情况下在字符串中搜索数字?
【发布时间】:2011-04-19 05:52:13
【问题描述】:

有没有办法在不使用正则表达式的情况下检查字符串中是否包含任何数字?我正在考虑将其拆分为一个数组并对其进行搜索,但有人告诉我有一种更简单的方法:

//pseudocode
string aString = "The number 4"

If (aString contains a number) Then enter validation loop
Else return to main

//output
"The string contains a number. Are you sure you want to continue?"

【问题讨论】:

    标签: c# string search


    【解决方案1】:

    您可以为字符串创建一个扩展方法,并结合使用 LINQ 和 Char.IsNumber 函数,例如

    public static class StringExt
    {
        public static bool ContainsNumber(this string str)
        {
            return str.Any(c => Char.IsNumber(c)); 
        }
    }
    

    那么你的逻辑应该是这样的:

    //pseudocodestring 
    string str = "The number 4";
    If (aString.ContainsNumber())
        enter validation    
    

    【讨论】:

      【解决方案2】:

      您可以将String.IndexOfAny 用作:

      bool isNumeric = mystring.IndexOfAny("0123456789".ToCharArray()) > -1;
      

      【讨论】:

      • 谢谢。我同意了,结果很好。我也要考虑一下leppie的建议!
      【解决方案3】:
      var containsdigit = somestring.Any(char.IsDigit);
      

      【讨论】:

      • 很酷,谢谢。我看到 if (words.ToCharArray().Any(char.IsDigit)) 将返回与 if (words.IndexOfAny("0123456789".ToCharArray()) > -1) 相同的结果
      • 也有检查特殊字符的方法吗?我没有马上看到它
      • @Sinaesthetic:在功能上几乎相同。 IsDigit 也会检查一些 Unicode 情况。 IsNumber 做得更多,比如分数。
      • 似乎没有捕捉到特殊字符,但到目前为止 IndexOfAny 是。我只是假设已经有一种方法可以解决这个问题。很常见,不是吗?
      • @Sinaesthetic: char.IsDigit() 对于۴ 等字符也返回true。根据您的情况,这可能是完美的、灾难性的或无关紧要的,这本身就是没有一种方法可以做到这一点的原因——没有一种适用于所有情况的正确方法——以及如果每个常用的单行添加了可以支持的方法字符串,接口将是史诗般的长度。
      猜你喜欢
      • 2021-03-29
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多