c#你怎么判断一个字符串是否是数字?

在C#中调用Microsoft.VisualBasic命名空间下的类型验证函数   VB.NET中还是有很多有用的东西的。比如VB.NET可以直接调用Microsoft.VisualBasic命名空间下的各种有用的函数,特别是一些类型验证函数(IsDate,IsNumeric)就十分有用。就拿判断是否为数字来说,在网上我找到了在C#中用到的三种方法(但都有各自的不足之处):1、将字符串分解成Char,然后用Char.IsNumber(c)验证public bool IsNum 阅读详情
今天在写代码时突然想起测试经常用Microsoft.VisualBasic.Information.IsNumeric判断 url参数是否为数字时的这个方法的效率
因为数字是字符串是直接使用的,所以不需要转型,也就没有用tryparse
结果一测试吓一跳,这个方法的效率是如此的低,再测试了下tryparse还不错,正则的也比较差,
没什么技术含量,看结果吧:

先拓展下字符串:

   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))//if(c<'0' || c>'9')//最好的方法,在下面测试数据中再加一个0,然后这种方法效率会搞10毫秒左右
                    return false;
            }
            return true;
        }

        //vb isnumberic
        public static bool isNumberic2(this string _string)
        {
            return !string.IsNullOrEmpty(_string) && Microsoft.VisualBasic.Information.IsNumeric(_string);
        }
        //try parse
        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;
            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+$");
        }
    }

测试的代码:

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();
            for (int i = 1; i < 100000; i++)
            {
                res3 = str.isNumberic3();
            }
            wat.Stop();
            Console.WriteLine("try parse    {0}:{1},{2}", str, wat.ElapsedMilliseconds, res3);

            wat.Reset();
            wat.Start();
            for (int i = 1; i < 100000; i++)
            {
                res4 = str.isNumberic4();
            }
            wat.Stop();
            Console.WriteLine("try catch    {0}:{1},{2}", str, wat.ElapsedMilliseconds, res4);

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

下面是我本机的测试结果

isDigit      1234:5,True
isNumberic   1234:166,True
try parse    1234:21,True
try catch    1234:22,True
regex        1234:134,True

isDigit      1234a:5,False
isNumberic   1234a:196,False
try parse    1234a:19,False
try catch    1234a:5182,False
regex        1234a:150,False

isDigit      a1234:2,False
isNumberic   a1234:184,False
try parse    a1234:16,False
try catch    a1234:5084,False
regex        a1234:106,False

isDigit      :1,False
isNumberic   :0,False
try parse    :0,False
try catch    :1,False
regex        :0,False

isDigit      :1,False
isNumberic   :0,False
try parse    :1,False
try catch    :1,False
regex        :0,False

结果:循环判断是否是数字字符效率是最高的
而VisualBasic的方法效率比较低了
顺便测试了下VisualBasic里的left和right方法效率也一样的低,还不及substring的十分之一
所以VisualBasic里虽然有几个方法从名字看来比较好用,实际却比较杯具。


转载请注明出处:http://www.cnblogs.com/sohighthesky/ 



C#判断字符串是否为数字字符串 C#判断字符串是否为数字字符串 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用 try{} catch{} 语句。 我们可以在try语句块中试图将string类型的字符串变量转换为int类型,如果该字符串不是数字字符串则会抛出异常,这时在catch语句块中就能捕获异常。一旦发现异常,则不是数字字符串。 我们可以以下三种方式将s... 阅读详情

相关推荐

C#中三种判断是不是数字的方法

C#中三种判断是不是数字的方法: 第一种: try catch方法。。。 第二种: 正则表达式方法。。。 第三种: Double.TryParse方法。。。 具体见文档

c# 判断输入的字符串是否是数字的几种方法

//第一种 用正则 有空格也是返回false static string Regn(string input) { Regex reg = new Regex("^[1-9]\\d*$"); return reg.Match(input).Value ;//返回值可以是bool,可以用isMatch. } //...

ayman_zawahiri的博客 1万+

【自用】吉林大学计算机系统结构第二章:缓存优化 曲冠南老师版 笔记

容量8KB,2的十三次方,块大小16B,一块用掉四位,剩余2的九次方是标志位,则有512行,每个元素8B,则一块两个元素,a数组150块,b数组152块,不出现容量失效。不管是否交换内容,在同一“伪相联”组中的两块都是用同一个索引得到的,因此失效率相同,即:失效率伪相联=失效率2路。伪相联cache的命中时间等于直接映象cache的命中时间加上伪相联查找过程中的命中时间*该命中所需的额外开销。(6) 由编译器控制的预取,硬件预取的替代方法,在编译时加入预取的指令,在数据被用到之前发出预取请求。

weixin_73587775的博客 1616

C# 判定字符串是否为数字的方法

该方法只有当字符串是数字的时候,才能将字符串转换为数字并且返回结果true,否则将字符串转换为0并且返回结果false。此方法特别适用于字符串不是数字,防止转换过程中出现异常的情况,如果字符串不是数字,方法默认返回0。

淳潜 的博客 5376

【多媒体交互】Unity+普通摄像头实现UI事件分析

利用摄像头捕捉用户的手势或动作,结合坐标映射与事件系统触发UI交互

qq_38350004的博客 1324

工业数据采集实战:用open62541库读写PLC的OPC UA节点(避坑指南)

本文详细介绍了如何使用open62541库实现工业PLC的OPC UA节点数据采集,涵盖环境搭建、节点读写优化及生产环境故障排查。通过订阅模式和多节点读写技术,显著提升数据采集效率与稳定性,适用于智能制造和工业物联网场景。

weixin_30598225的博客 400

C#判断字符串中的内容是否为纯数字,最细教程

它通过将指定的字符串转换为等效的有符号整数表示并返回true。如果转换成功, true;这可以使用Regex.IsMatch()方法,它确定指定的字符串是否与提供的正则表达式匹配。Char.IsDigit()方法返回一个布尔值,用来指明指定的字符是否为数字。

i78i845的博客 8017

VConsole动态加载

// 移动端真机调试工具 vconsole import VConsole from "vconsole"; import Vue from "vue"; // 动态使用VConsole if(process.env.NODE_ENV==='production'){ if(process.env.VUE_APP_BASEURL.includes('test')||process.env.VUE_APP_BASEURL.includes('pre')){ Vue.prototype

aliven1的博客 1043

C# 判断一个字符串是否数字开头

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;   using

longxinzishu的专栏 2486

基于Hadoop的NBA篮球球员大数据分析与可视化系统大数据分析系统python的项目(源码+lw+部署文档+讲解等)

本系统以 Hadoop 为基础,致力于对 NBA 篮球球员的海量数据进行深入分析与可视化呈现。它能够收集来自多个数据源的丰富数据,包括球员比赛统计数据、身体素质数据、技术特点数据等。利用 Hadoop 的分布式存储和计算能力,对这些大规模数据进行高效处理。通过数据分析算法,挖掘球员的潜在价值和特点,如球员的得分能力趋势、篮板球效率变化、不同位置球员的技术差异等。同时,借助先进的可视化技术,将分析结果以直观的图表、图形等形式展示出来。教练和球队管理层可以通过可视化界面清晰地了解球员的综合表现和发展态势,从而制

QQ3359892174的博客 1314

YOLOv13改进策略【Head】| 引入RT-DETR中的RTDETRDecoder,替换检测头

本文记录的是基于RTDETRDecoder模块的YOLOv13目标检测改进方法研究。RT-DETR的模块通过,能为解码器提供高质量的初始,从而。相比v13原始的检测头,RT-DETR能,替换后能够更好的提高模型性能。

Limiiiing的博客 434

C#判断一个字符串是否是数字或者含有某个数字

第一种就是 最常见的 用Try..Catch.. 再try中强转你要确认的string 类型 成功就是int catch 就不是 string a = "avdfd"; try { int b = int.Parse(a); } ...

1360

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

m0_51579041的博客 1万+

c# 如何判断一个字符串是一个数字

  最好的办法是使用正则表达式   using   System.Text.RegularExpressions;     ....     Regex   myRex   =   new   Regex("^[-+]?[0-9]+[.]?[0-9]*([eE][-+]?[0-9]+)?$");     String   s   =   "123.345";             Mat

daming_ocean的专栏 1303

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解

系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 6738

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C#如何判断一个字符串中是否有非英文、数字字符

using System.Text.RegularExpressions; Regex rex = new Regex("[a-z0-9A-Z_]+"); Match ma = rex.Match(“你的复字符制串zhidao”); if (ma.Success) { MessageBox.Show(“OK”); } else { MessageBox.Show(“Fail”); }

IT技术猿猴的博客 2394

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# 判断一个字符串是否为数字

判断一个字符串是否为数字 String num1=“200.98”; int num2; double num3; if (int.TryParse(num1, out num2)) return"都是数字,并且是整数"; if (double.TryParse(num1, out num3)) return"都是数字,并且是浮点数"; else return"不是数字"; ...

Pei_hua100的专栏 801

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# 判断一个字符串是否都是数字

using   System;      using   System.Text.RegularExpressions;          public    bool   IsNumber(String    strNumber)      {      Regex    objNotNumberPattern=new   Regex("[^0-9.-]"

minyangchina的专栏 678

【转】C#判断一个字符串是否是数字

//判断一个string是否可以为数字 //方案一:Try...Catch(执行效率不高) /// /// 名称:IsNumberic /// 功能:判断输入的是否是数字 /// 参数:string oText:源文本 /// 返回值: bool true:是 false:否

拓 1224

C#中,判断一个字符串是否为数字

用正则进行验证。 需要引用 using System.Text.RegularExpressions; 事件里这么写。 bool yz=Regex.IsMatch(TextBox1, @"^[0-9]*[1-9][0-9]*$"); if(!yz) { MessageBox.Show("必须是正整数"); } ...

weixin_34288121的博客 176

c#你怎么判断一个字符串是否是数字?(转)

今天在写代码时突然想起测试经常用Microsoft.VisualBasic.Information.IsNumeric判断 url参数是否为数字时的这个方法的效率因为数字是字符串是直接使用的,所以不需要转型,也就没有用tryparse结果一测试吓一跳,这个方法的效率是如此的低,再测试了下tryparse还不错,正则的也比较差,没什么技术含量,看结果吧:先拓展下字符串:code pub...

weixin_30312563的博客 91

判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)

在编程的时候,经常遇到要判断一个字符串中的字符是否全部是数字(0-9),本来是一个很容易实现的功能,但程序员首先会想到的是,这样简单的功能有没有现成的函数可以用呢?VB.NET中有个IsNumeric(object),C#中只有判断单个字符的Char.IsNumber(),IsNumeric可以判断double类型的数字字符串,但无法排除正负号和小数点,如果判断字符串是否是一个数的话用它挺合适,但

⒈oo﹪緈鍢 905

判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)

    在编程的时候,经常遇到要判断一个字符串中的字符是否全部是数字(0-9),本来是一个很容易实现的功能,但程序员首先会想到的是,这样简单的功能有没有现成的函数可以用呢?VB.NET中有个IsNumeric(object),C#中只有判断单个字符的Char.IsNumber(),IsNumeric可以判断double类型的数字字符串,但无法排除正负号和小数点,如果判断字符串是否是一个数的话用它挺

fanruinet的专栏 1万+
上一篇: C# 登录QQ网站并获取QQ相关信息
下一篇: C# 一个关于等差数列的算法
Hauk
博客等级 码龄15年 219粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值