当前位置: 代码迷 >> ASP.NET >> .net你如何判断字符串是否全是数字
  详细解决方案

.net你如何判断字符串是否全是数字

热度:2014   发布时间:2013-02-26 00:00:00.0
.net你怎么判断字符串是否全是数字
今天在写代码时突然想起测试经常用Microsoft.VisualBasic.Information.IsNumeric判断 url参数是否为数字时的这个方法的效率

因为数字是字符串是直接使用的,所以不需要转型,也就没有用tryparse

结果一测试吓一跳,这个方法的效率是如此的低,再测试了下tryparse还不错,正则的也比较差,

没什么技术含量,看结果吧:

 

先拓展下字符串:

 

code 
 
C# code
  public static class Common    {        //isDigit        public static bool isNumberic1(this string _string)        {            if (string.IsNullOrEmpty(_string))                return false;            foreach (char c in _string)            {                if (!char.IsDigit(c))                    return false;            }            return true;        }        //vb isnumberic        public static bool isNumberic2(this string _string)        {            return !string.IsNullOrEmpty(_string) && Microsoft.VisualBasic.Information.IsNumeric(_string);        }        //try parese        public static bool isNumberic3(this string _string)        {            if (string.IsNullOrEmpty(_string))                return false;            int i = 0;            return int.TryParse(_string, out i);        }        //try catch        public static bool isNumberic4(this string _string)        {            if (string.IsNullOrEmpty(_string))                return false;            int i = 0;            try { int.Parse(_string); }            catch { return false; }            return true;        }        //regex        public static bool isNumberic5(this string _string)        {            return !string.IsNullOrEmpty(_string) && Regex.IsMatch(_string, "^\\d+$");        }    } 


测试的代码:

 

code 
C# code
    class Program 
    {
        static void Main(string[] args)
        {

            Test("1234");
            Test("1234a");
            Test("a1234");
            Test("");
            Test(null);
           
        }

        static void Test(string str)
        {
            bool res1 = false, res2 = false, res3 = false, res4 = false, res5 = false;
            Stopwatch wat = new Stopwatch();
            wat.Start();
            for (int i = 1; i < 100000; i++)
            {
                res1 = str.isNumberic1();
            }
            wat.Stop();
            Console.WriteLine("isDigit      {0}:{1},{2}", str, wat.ElapsedMilliseconds, res1);

            wat.Reset();
            wat.Start();
            for (int i = 1; i < 100000; i++)
            {
                res2= str.isNumberic2();
            }
            wat.Stop();
            Console.WriteLine("isNumberic  {0}:{1},{2}", str, wat.ElapsedMilliseconds, res2);

            wat.Reset();
            wat.Start();
  相关解决方案