首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查字符串是否只包含数字的最快方法

检查字符串是否只包含数字的最快方法
EN

Stack Overflow用户
提问于 2011-09-18 19:10:50
回答 20查看 263.4K关注 0票数 208

我知道几种方法来检查这个。正则表达式、int.parsetryparse、循环。

谁能告诉我检查最快的方法是什么?

需要的是只对进行检查,不需要实际解析。

这与以下问题不同:How do I identify if a string is a number?

问题不仅仅是如何识别。但是关于什么是最快的方法。

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2011-09-18 19:13:55

代码语言:javascript
复制
bool IsDigitsOnly(string str)
{
    foreach (char c in str)
    {
        if (c < '0' || c > '9')
            return false;
    }

    return true;
}

可能是最快的方法。

票数 299
EN

Stack Overflow用户

发布于 2016-08-31 18:35:56

您可以简单地使用LINQ来完成此操作

return str.All(char.IsDigit);

对于空字符串,

  1. .All返回true,对于所有Unicode字符,如果strings.
  2. char.IsDigit为空,则返回exception。
票数 88
EN

Stack Overflow用户

发布于 2011-09-18 19:13:57

以下是基于同一字符串的1000000次解析的一些基准测试:

更新了release统计信息:

代码语言:javascript
复制
IsDigitsOnly: 384588
TryParse:     639583
Regex:        1329571

下面是代码,看起来IsDigitsOnly更快:

代码语言:javascript
复制
class Program
{
    private static Regex regex = new Regex("^[0-9]+$", RegexOptions.Compiled);

    static void Main(string[] args)
    {
        Stopwatch watch = new Stopwatch();
        string test = int.MaxValue.ToString();
        int value;

        watch.Start();
        for(int i=0; i< 1000000; i++)
        {
            int.TryParse(test, out value);
        }
        watch.Stop();
        Console.WriteLine("TryParse: "+watch.ElapsedTicks);

        watch.Reset();
        watch.Start();
        for (int i = 0; i < 1000000; i++)
        {
            IsDigitsOnly(test);
        }
        watch.Stop();
        Console.WriteLine("IsDigitsOnly: " + watch.ElapsedTicks);

        watch.Reset();
        watch.Start();
        for (int i = 0; i < 1000000; i++)
        {
            regex.IsMatch(test);
        }
        watch.Stop();
        Console.WriteLine("Regex: " + watch.ElapsedTicks);

        Console.ReadLine();
    }

    static bool IsDigitsOnly(string str)
    {
        foreach (char c in str)
        {
            if (c < '0' || c > '9')
                return false;
        }

        return true;
    }
}

当然,值得注意的是,TryParse确实允许前导/尾随空格以及特定于文化的符号。它也受到字符串长度的限制。

票数 74
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7461080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档