Char.IsDigit()或Char.IsNumber判断字符是否为数字,你真的对吗?
最近在检测字符是否为数字的时候用到了Char.IsDigit(),测试的时候误操作输入了全角字符,以致在做类型转换的时候报了个大大的异常。我忽如其来的好奇心想知道是什么原因?!!!
于是我十指大动用度娘解开了Char.IsDigit()的“神秘面纱”。
判断Char是否为数字有三种方法:
- Char.IsDigit (aChar) 指示指定字符串中位于指定位置处的字符是否属于十进制数字类别
- Char.IsNumber(aChar) 指示指定字符串中位于指定位置的字符是否属于数字类别
- aChar>='0'&&aChar<='9' 判断aChar是否位于‘0’到‘9’之前 等同于第一种
为了更好的学习,我们查看源码可以看到
public static bool IsNumber(char c)
{ if (!IsLatin1(c)) { return CheckNumber(CharUnicodeInfo.GetUnicodeCategory(c)); } if (!IsAscii(c)) { return CheckNumber(GetLatin1UnicodeCategory(c)); } return ((c >= '0') && (c <= '9'));
}
public static bool IsDigit(char c)
{ if (!IsLatin1(c)) { return (CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber); } return ((c >= '0') && (c <= '9'));
}
可以看出IsDigit和IsNumber之间有什么区别呢?
从表面上看Char.IsNumber 多了一步检查ASCII码
那可能有好奇心重的小伙伴就要想了:
- IsLatin1()这个方法是干什么的呢?
- IsNumber里的CheckNumber()具体是干什么?
下面我们一个一个来说
- IsLatin1方法是判断字符是0~255的函数,值得注意的是:全角的0、1、2、3、4、5等的Unicode编码不在这个范围
- CheckNumber方法看一下源码就明白了
internal static bool CheckNumber(UnicodeCategory uc)
{switch (uc){case UnicodeCategory.DecimalDigitNumber:case UnicodeCategory.LetterNumber:case UnicodeCategory.OtherNumber:return true;}return false;
}
这就能看出IsNumber和IsDigit方法相比有3点区别:
1)多了一个UnicodeCategory.LetterNumber类型
2)多了一个UnicodeCategory.OtherNumber类型
3)多了一个IsAscii的判断(0~127)
显然IsNumber的适用范围更大。
下面列举几种IsNumber认为是数字的字符
UnicodeCategory.LetterNumber:Ⅰ、Ⅱ、Ⅲ
UnicodeCategory.OtherNumber:①、②、③
IsDigit方法在判断全角数字时,因为全角的0、1、2、3等的Unicode编码不在字符是0~255的范围,于是就执行了下面这句代码:
CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
对于Unicode的分类中,半角的1,2,3和全角的0、1、2、3等都被归为了DecimalDigitNumber,所以对于全角的数字,这个方法返回了true。
结论
有了上面的了解,我们在判断字符是否是数字的时候就需要注意了。
在判断是否是ASCII数字(0~9)的时候,我们需要注意以下几点了。
1)不能用IsDigit和IsNumber函数判断是否是ASCII数字,这两个函数都有可能把ASCII以外的某些字符当做是数字。
2)尽量用这种方式判断: c >= '0' && c <= '9'(当然也可以用正则表达式)。
3)数字判断的严格性,从严到松依次是:
c >= '0' && c <= '9' ⇒IsDigit ⇒IsNumber
小伙伴们,你们会判断字符是否是数字了吗?
Char.IsDigit()或Char.IsNumber判断字符是否为数字,你真的对吗?相关推荐
- Java常用方法:StringUtils工具类、去除空格的函数、手机号中间4位换成*、判断字符是否为数字
isEmpty系列 StringUtils.isEmpty() 是否为空. 可以看到 " " 空格是会绕过这种空判断,因为是一个空格,并不是严格的空值,会导致 isEmpty(&q ...
- 【Python系列】之判断字符是否为数字
序 python下,有个str.isdigit()可能被常用来判断字符是否为数字,但是其只能判断字符型整数.不能判断float型字符例如"12.333".下面给出另外的代码,以 ...
- Char.IsDigit与Char.IsNumber的区别[转]
需要判断Char是否为数字,查看了下MSDN,发现有三种方法: Char.IsDigit (aChar) 指示指定字符串中位于指定位置处的字符是否属于十进制数字类别 Char ...
- java char是否为数字_java判断字符是否为数字
java中判断字符是否数字的方法:(推荐:java视频教程) 方法一:用JAVA自带的函数public static boolean isNumeric(String str){ for (int i ...
- python判断字符是否为数字或字母
str_1 = "1234" str_2 = "Abcd" str_3 = "123Abdc" #用isdigit函数判断是否数字 prin ...
- python判断字符是否是数字和字母_python判断字符是否为字母和数字
在使用python语言中的字符串方法时,可以使用它们判断字符串中是否有字母或数字或其他的构成.下面利用几个实例说明字符串方法的用法,操作如下:云海天教程网,大量的免费python教程,欢迎在线学习!s ...
- C语言判断字符是否为数字 如果是输出yes 如果为字母 则大写转换小写 小写转换大写
#include <stdio.h>int main(void) {char ch;printf("input a char:");ch=getchar();//判断c ...
- php 判断字符是否是数字_php判断输入是否是纯数字,英文,汉字的方法
本文实例讲述了php判断输入是否是纯数字,英文,汉字的方法.分享给大家供大家参考.具体分析如下: 这里利用php的mb_strlen和strlen函数就可以轻松得知字符串的构成是全英文.英汉混合.还是 ...
- JS判断字符是否为数字类型
js有个函数 isNaN(val)//如果是数字则返回 false 使用时候 if(!isNaN(val)){ alert("是数字"); }else{ alert( ...
最新文章
- 计算机网络OSI架构详细图
- 【Python学习系列二十九】scikit-learn库实现天池平台智慧交通预测赛
- Android中解析XML
- BZOJ2169 连边(动态规划)
- 用workbench给表重命名_MySQL Workbench的使用方法(图文)
- excel删除空行_教你简单小妙招将Excel里重复的数据筛选出来!
- 【报告分享】2019年中国智能门锁发展与应用白皮书.pdf
- 光纤跳线的交叉连接注意点?
- 【PID优化】基于matlab天牛须算法PID控制器优化设计【含Matlab源码 1312期】
- TensorFlow 莫烦python
- layui表单验证,表单提交的若干个方法
- 苹果园助力爱奇艺各业务协同作战,视频平台的战争将走向何方?
- Java_167_Thread_线程安全synchronized_模拟选座_List「Integer」
- CH341A及XTW 2两种SPI FLASH烧录器的硬件使用说明_20220920【可用于升级主板BIOS】
- 2022年贵州二级建造师建设工程法规及相关知识模拟题及答案
- CSI笔记【5】:Widar2.0: Passive Human Tracking with a Single Wi-Fi Link论文阅读
- RapidScada免费开源Scada组态软件系列教程5-系统进阶
- eclipse中进行java编程时,CTRL+左键时,看不到源码的解决方法。
- WINME/WIN2000/LINUX多重启动详解(4年前写的,不知道现在还有没有用)
- 听说你想面对监狱编程,你,够格吗?
热门文章
- 【从零开始】PythonOCC
- 挑战:对目前所有过图掉线情况和CPU负荷,网络负载的原因分析
- Last.fm数据集主要属性:artist,album, and track name
- linux桌面环境安装
- 飞翼布局短垂起降飞机概念设计--“彩鸿22”舰载无人机
- Windows系统安装使用Redis教程
- 安卓基本控件与布局的使用
- java 开源 server_simplewebserver: SimpleWebServer 是一款使用Java基于NIO编写的超轻量级开源Web Application Server...
- 数字化转型人才队伍建设数字化模型-数字化转型网
- 【编译原理】学习笔记1 词法分析