网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > .Net编程 > 正文

c#实现判断一个字符串是否是数字

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

今天在写代码时突然想起测试经常用Microsoft.VisualBasic.Information.IsNumeric判断 url参数是否为数字时的这个方法的效率

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

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

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

先拓展下字符串:

  1. public static class Common 
  2.     { 
  3.         //isDigit 
  4.         public static bool isNumberic1(this string _string) 
  5.         { 
  6.             if (string.IsNullOrEmpty(_string)) 
  7.                 return false
  8.             foreach (char c in _string) 
  9.             { 
  10.                 if (!char.IsDigit(c)) 
  11.                     return false
  12.             } 
  13.             return true
  14.         } 
  15.  
  16.         //vb isnumberic 
  17.         public static bool isNumberic2(this string _string) 
  18.         { 
  19.             return !string.IsNullOrEmpty(_string) && Microsoft.VisualBasic.Information.IsNumeric(_string); 
  20.         } 
  21.         //try parese 
  22.         public static bool isNumberic3(this string _string) 
  23.         { 
  24.             if (string.IsNullOrEmpty(_string)) 
  25.                 return false
  26.             int i = 0; 
  27.             return int.TryParse(_string, out i); 
  28.         } 
  29.  
  30.         //try catch 
  31.         public static bool isNumberic4(this string _string) 
  32.         { 
  33.             if (string.IsNullOrEmpty(_string)) 
  34.                 return false
  35.             int i = 0; 
  36.             try { int.Parse(_string); } 
  37.             catch { return false; } 
  38.             return true
  39.         } 
  40.         //regex 
  41.         public static bool isNumberic5(this string _string) 
  42.         { 
  43.             return !string.IsNullOrEmpty(_string) && Regex.IsMatch(_string, "^\\d+contentquot;); 
  44.         } 
  45.     } 

测试的代码:

  1. class Program 
  2.     { 
  3.         static void Main(string args) 
  4.         { 
  5.  
  6.             Test("1234"); 
  7.             Test("1234a"); 
  8.             Test("a1234"); 
  9.             Test(""); 
  10.             Test(null); 
  11.              
  12.         } 
  13.  
  14.         static void Test(string str) 
  15.         { 
  16.             bool res1 = false, res2 = false, res3 = false, res4 = false, res5 = false
  17.             Stopwatch wat = new Stopwatch(); 
  18.             for (int i = 1; i < 100000; i++) 
  19.             { 
  20.                 res1 = str.isNumberic1(); 
  21.             } 
  22.             wat.Stop(); 
  23.             Console.WriteLine("isDigit      {0}:{1},{2}", str, wat.ElapsedMilliseconds, res1); 
  24.  
  25.             wat.Reset(); 
  26.             wat.Start(); 
  27.             for (int i = 1; i < 100000; i++) 
  28.             { 
  29.                 res2= str.isNumberic2(); 
  30.             } 
  31.             wat.Stop(); 
  32.             Console.WriteLine("isNumberic   {0}:{1},{2}", str, wat.ElapsedMilliseconds, res2); 
  33.  
  34.             wat.Reset(); 
  35.             wat.Start(); 
  36.             for (int i = 1; i < 100000; i++) 
  37.             { 
  38.                 res3 = str.isNumberic3(); 
  39.             } 
  40.             wat.Stop(); 
  41.             Console.WriteLine("try parse    {0}:{1},{2}", str, wat.ElapsedMilliseconds, res3); 
  42.  
  43.             wat.Reset(); 
  44.             wat.Start(); 
  45.             for (int i = 1; i < 100000; i++) 
  46.             { 
  47.                 res4 = str.isNumberic4(); 
  48.             } 
  49.             wat.Stop(); 
  50.             Console.WriteLine("try catch    {0}:{1},{2}", str, wat.ElapsedMilliseconds, res4); 
  51.  
  52.             wat.Reset(); 
  53.             wat.Start(); 
  54.             for (int i = 1; i < 100000; i++) 
  55.             { 
  56.                 res5 = str.isNumberic5(); 
  57.             } 
  58.             wat.Stop(); 
  59.             Console.WriteLine("regex        {0}:{1},{2}", str, wat.ElapsedMilliseconds, res5); 
  60.             Console.WriteLine(); 
  61.         } 
  62.     } 

下面是我本机的测试结果

  1. isDigit      1234:0,True 
  2. isNumberic   1234:173,True 
  3. try parse    1234:21,True 
  4. try catch    1234:23,True 
  5. regex        1234:138,True 
  6.  
  7. isDigit      1234a:0,False 
  8. isNumberic   1234a:204,False 
  9. try parse    1234a:20,False 
  10. try catch    1234a:5309,False 
  11. regex        1234a:151,False 
  12.  
  13. isDigit      a1234:0,False 
  14. isNumberic   a1234:191,False 
  15. try parse    a1234:16,False 
  16. try catch    a1234:5229,False 
  17. regex        a1234:109,False 
  18.  
  19. isDigit      :0,False 
  20. isNumberic   :0,False 
  21. try parse    :0,False 
  22. try catch    :1,False 
  23. regex        :0,False 
  24.  
  25. isDigit      :0,False 
  26. isNumberic   :1,False 
  27. try parse    :0,False 
  28. try catch    :1,False 
  29. regex        :0,False 

结果:循环判断是否是数字字符效率是最高的

而vbscript的方法效率比较低了

顺便测试了下vbscript里的left和right方法效率也一样的低,还不及substring的十分之一

所以vbscript里虽然有几个方法从名字看来比较好用,实际却比较杯具。

设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师