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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

我知道几种检查方法。int.parsetryparse、循环。

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

只需要查帐不需要实际分析。

这与以下问题不同:如何识别字符串是否为数字?

问题不仅在于如何识别,还在于什么是最快方法。

提问于
用户回答回答于
bool IsDigitsOnly(string str)
{
    foreach (char c in str)
    {
        if (c < '0' || c > '9')
            return false;
    }

    return true;
}

可能是最快的方法。

用户回答回答于

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

更新为release统计数据:

IsDigitsOnly: 384588
TryParse:     639583
Regex:        1329571

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

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允许引导/尾随空格以及特定于文化的符号。它还限制了字符串的长度。

扫码关注云+社区