经常会遇到这样的情况,需要判断一个字符串是否是一个合法的数,包括整数,小数或者实数。
网上查到很多文章大多是判断这个字符串是否全为数字,比如下面这段来自StringUtils的代码,可以看到,13.2这样的数字实际上会返回false,可是,他的确是一个数字。
- public static boolean isNumeric(String str) {
- if (str == null) {
- return false;
- }
- int sz = str.length();
- for (int i = 0; i < sz; i++) {
- if (Character.isDigit(str.charAt(i)) == false) {
- return false;
- }
- }
- return true;
- }
当然,网上还能查到很多其他方式,诸如用正则表达式判断是否0-9,用字符ascii码判断是否是数字以及用Double.parseDouble()是否抛出异常来判断是否为数字。
事实上,除了最后一种方式能达到我们的要求,其他的都很难真正做到类似的判断。但是最后一种方式也很难区别出到底是正整数,负整数,正小数还是负小数,而且,捕获异常的方式实在是有些难看。
基于此原因,我自己写了一个工具类,专门用作数的检测,目前能够检测正整数,负整数,整数,正小数,负小数,小数以及实数,采用的仍然是正则表达式的方式,当然,如果有遗漏或者错误,欢迎联系我以便更正,同时也欢迎修改或使用这些代码以便符合你的应用场景。
可以简单讲下正则的思想以便修改,
1. 对于正整数而言,可以带+号,第一个数字不能为0
2. 对于负整数而言,必须带负号,第一个数字也不能为0
3. 对于整数而言,实际是由0,正整数和负整数组成的,所以偷个懒用前两个方法一起判断
4. 对于正小数而言,可以考带+号,并考虑两种情况,第一个数字为0和第一个数字不为0,第一个数字为0时,则小数点后面应该不为0,第一个数字不为0时,小数点后可以为任意数字
5. 对于负小数而言,必须带负号,其余都同上
6. 对于小数,可以带正负号,并且带小数点就行了,但是至少保证小数点有一边不为空,所以这里还是分左边不为空和右边不为空的情况
7. 实数比较简单,,要么是整数,要么是小数
- package com.sap.cesp.creditinsight.web.app.util;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class NumberValidationUtils {
- private static boolean isMatch(String regex, String orginal){
- if (orginal == null || orginal.trim().equals("")) {
- return false;
- }
- Pattern pattern = Pattern.compile(regex);
- Matcher isNum = pattern.matcher(orginal);
- return isNum.matches();
- }
- public static boolean isPositiveInteger(String orginal) {
- return isMatch("^\\+{0,1}[1-9]\\d*", orginal);
- }
- public static boolean isNegativeInteger(String orginal) {
- return isMatch("^-[1-9]\\d*", orginal);
- }
- public static boolean isWholeNumber(String orginal) {
- return isMatch("[+-]{0,1}0", orginal) || isPositiveInteger(orginal) || isNegativeInteger(orginal);
- }
- public static boolean isPositiveDecimal(String orginal){
- return isMatch("\\+{0,1}[0]\\.[1-9]*|\\+{0,1}[1-9]\\d*\\.\\d*", orginal);
- }
- public static boolean isNegativeDecimal(String orginal){
- return isMatch("^-[0]\\.[1-9]*|^-[1-9]\\d*\\.\\d*", orginal);
- }
- public static boolean isDecimal(String orginal){
- return isMatch("[-+]{0,1}\\d+\\.\\d*|[-+]{0,1}\\d*\\.\\d+", orginal);
- }
- public static boolean isRealNumber(String orginal){
- return isWholeNumber(orginal) || isDecimal(orginal);
- }
- }
相关推荐
水泥袋检测系统源码和数据集:改进yolo11-DCNV4
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
使用Plotly绘制散点图_柱状图_折线图_三维图_饼状图
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
光敏电阻接线图
MAX30102心率血样传感器原理图
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
胎儿脑部异常检测系统源码和数据集:改进yolo11-convnextv2
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
本项目为基于Kotlin语言的安卓Camera2拍照录像设计源码,总计包含48个文件,涵盖17个XML配置文件、10个WEBP图片文件、5个Kotlin源代码文件、3个Git忽略文件、3个Gradle配置文件、2个Markdown文档、2个属性文件、1个Gradle脚本文件、1个APK安装包以及1个JSON文件。该源码适用于实现安卓设备的拍照和录像功能。
【C#】设计模式大作业_pgj
本项目是一款基于ruoyi框架开发的校园后勤Vue前端设计源码,包含358个文件,涵盖122个Vue组件、93个SVG图标、87个JavaScript脚本、25个PNG图片、10个SCSS样式表、3个批处理脚本、3个JPG图片、2个HTML页面、2个JSON配置文件、2个备份文件。该代码适用于校园后勤管理系统,旨在提升校园后勤服务效率。
该项目是基于Spring Boot框架的校园外卖点餐系统设计源码,包含162个文件,包括142个Java源文件、16个XML配置文件、2个YML配置文件、1个Git忽略文件和1个XLSX文件。系统采用前后端分离架构,结合Mybatis、Spring Cache、阿里云OSS、Swagger、POI和WebSocket等技术,支持菜品、套餐、订单管理、支付、报表统计及用户催单等功能。系统分为后台管理端和用户端,用户端通过微信小程序实现。我的主要工作包括管理端员工及菜品信息的增删改查功能。
基于QT框架的OpenCV人脸识别
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
图像处理新思路:微生物菌落图像分割
该项目是一款基于Python核心的跨语言智能补全插件YouCompleteMe的设计源码,包含131个文件,涵盖57个Python文件、23个Vim配置文件、6个Markdown文件、5个C/C++源文件、3个YAML配置文件、3个文本文件以及少量其他类型的文件。该插件支持Python、C++、Shell、C等多种编程语言,旨在为开发者提供高效的代码补全功能。
英国MIDNORCO沉积物岩性数据集 内容: Fyfe, RM (2014) 发布的数据集详细记录了位于英国的MIDNORCO沉积物岩心的岩性特征。此数据集共包含12个数据点,提供了关于该地区地质结构的重要信息。通过访问以下链接可获取完整数据集:"" ()。这些数据对于研究古环境变化、地质年代测定以及了解地球历史具有重要意义。
内容: 本数据集记录了来自Filchner Trough的威德尔海豹(标记为FIL2014_wed_a_m_03)的潜水时长信息,由Bornemann H、Oosthuizen WC、Schröder M等人于2014年发布。该数据集包含了2033个数据点,提供了对单只威德尔海豹潜水行为的详细观察。通过访问以下链接可以获取完整的数据集详情:"" ()。这项研究有助于我们更好地理解威德尔海豹在南极海域中的生活习性与行为模式。
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作