Java 字符串的数字校验:isNumeric,isNumericSpace和正则表达式,对比分析

article/2025/11/10 19:23:54

导读

        数字类型的判断是项目里常见的场景,相比一大串的非空,instanceof 以及大于小于0的判断,我更倾向于使用工具类 StringUtils 或者 正则表达式 来实现功能,追求代码的简洁和高效。

        你可能需要的博客:

  • 正则表达式预编译功能的正确使用
  • Java 正则表达式:语法讲解和常用表达式汇总

正文

一、StringUtils 方法

        isNumeric() 和 isNumericSpace() 都属于 StringUtils,区别也就在字面意思里:对 Space(空格)的处理方式不用。

        使用 StringUtils 类,需要在 pom.xml 中引入“commons-lang3”依赖:

        <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</version></dependency>

1. StringUtils.isNumeric()

        目的:用来判断传入字符串是否为正整数。

  • 方法展示
    @Testvoid test_isNumeric(){System.out.println("正整数:" + StringUtils.isNumeric("123"));         // trueSystem.out.println("零:" + StringUtils.isNumeric("0"));               // trueSystem.out.println("负整数:" + StringUtils.isNumeric("-123"));        // falseSystem.out.println("小数:" + StringUtils.isNumeric("1.23"));          // falseSystem.out.println("null:" + StringUtils.isNumeric(null));            // falseSystem.out.println("空格:" + StringUtils.isNumeric(" "));             // falseSystem.out.println("空字符串:" + StringUtils.isNumeric(""));           // falseSystem.out.println("数字带空格:" + StringUtils.isNumeric("1 2 3"));    // false}
  • StringUtils.isNumeric() 源码 

         isNumeric() 会遍历 CharSequence 字符并逐一校验,所以就需要参数字符串的每一位都满足【十进制数字】这一规则,所以,像“-123”或“+123”这样认知上为数字的字符串验证结果是 False。

    /** StringUtils.isNumeric() 源码 */public static boolean isNumeric(CharSequence cs) {// 1. 校验:'',空和nullif (isEmpty(cs)) {return false;} else {int sz = cs.length();for(int i = 0; i < sz; ++i) {// 2. 校验:判断字符的一般类别是否为【十进制数字】if (!Character.isDigit(cs.charAt(i))) {return false;}}return true;}}

        如果进一步 DeBug 进入 Character.isDigit() 方法,会发现 isDigit() 属于 java.lang.Character,也就是说:isNumeric() 归根结底用的还是 Java 自带的字符判断方法。

    /** 当前方法属于 java.lang.Character */    public static boolean isDigit(char ch) {return isDigit((int)ch);}

        进一步 DeBug 进入  isDigit() , 核心代码是 Character.getType() 方法,它的作用就是:判断字符的一般类别是否为【十进制数字】(十进制数字返回9,其他类型自己看源码)。

    /** 当前方法属于 java.lang.Character */public static boolean isDigit(int codePoint) {// getType() 目的是获取 codePoint 的类型// Character.DECIMAL_DIGIT_NUMBER = 9return getType(codePoint) == Character.DECIMAL_DIGIT_NUMBER;}

2. StringUtils.isNumericSpace()

        目的:用来判断传入字符串是否为正整数,字符串里的空格不影响结果。

  • 方法展示
    @Testvoid test_isNumericSpace(){System.out.println("正整数:" + StringUtils.isNumericSpace("123"));         // trueSystem.out.println("零:" + StringUtils.isNumericSpace("0"));               // trueSystem.out.println("负整数:" + StringUtils.isNumericSpace("-123"));        // falseSystem.out.println("小数:" + StringUtils.isNumericSpace("1.23"));          // falseSystem.out.println("null:" + StringUtils.isNumericSpace(null));            // falseSystem.out.println("空格:" + StringUtils.isNumericSpace(" "));             // trueSystem.out.println("空字符串:" + StringUtils.isNumericSpace(""));          // trueSystem.out.println("数字带空格:" + StringUtils.isNumericSpace("1 2 3"));   // true}
  • StringUtils.isNumericSpace() 源码

        isNumericSpace()与isNumeric()的区别在于,isNumericSpace() 对空格以及空字符串的处理结果也为 True,就算是字符串内部的空格也会自动忽略掉,这些改变在源码里可以清晰的看出差别。

    /** StringUtils.isNumericSpace() 源码 */public static boolean isNumericSpace(CharSequence cs) {// 1. 这里没有 isEmpty() 判空,只校验了 nullif (cs == null) {return false;} else {int sz = cs.length();for(int i = 0; i < sz; ++i) {// 2. 这里排除了“空格”的情况,认为不为正整数且同时不为''时,才返回 Falseif (!Character.isDigit(cs.charAt(i)) && cs.charAt(i) != ' ') {return false;}}return true;}}

        其他部分源码与分析与isNumeric()一脉相承。


二、正则表达式

        StringUtils 的方法有自己的局限性,它只能判断正整数,其他的数字类型,如:负整数,浮点数...,使用正则表达式是常用的手段。

  • 预编译的正则写法
    // regexRule 是正则规则private static final Pattern pattern = Pattern.compile(regexRule);@Testvoid test_pattern(){Matcher mat = pattern.matcher("-123");System.out.println("正则匹配结果:" + mat);}
  • 数字有关的正则表达式
说明正则表达式
非负整数(正整数 + 0)^\d+$
正整数^[0-9]*[1-9][0-9]*$
非正整数(负整数 + 0)^((-\d+)|(0+))$
负整数^-[0-9]*[1-9][0-9]*$
浮点数^(-?\d+)(\.\d+)?$
非负浮点数(正浮点数 + 0)^\d+(\.\d+)?$
非正浮点数(负浮点数 + 0)^((-\d+(\.\d+)?)|(0+(\.0+)?))$
......


http://chatgpt.dhexx.cn/article/EIehuo9I.shtml

相关文章

StringUtils.isNumeric(str)

在项目中遇到一处bug&#xff0c;调试的结果竟然是StringUtils.isNumeric(String str) 在捣鬼&#xff08;采用的是org.apache.commons.lang.StringUtils&#xff09;&#xff0c;下面的代码是判断一个参数非空&#xff0c;且为整数&#xff1a; if(StringUtils.isNumeric(str)…

第六十七章 SQL函数 ISNUMERIC

文章目录 第六十七章 SQL函数 ISNUMERIC大纲参数描述示例 第六十七章 SQL函数 ISNUMERIC 测试有效数字的数值函数。 大纲 ISNUMERIC(check-expression)参数 check-expression - 要计算的表达式。 ISNUMERIC返回SMALLINT数据类型。 描述 ISNUMERIC计算check-expression并…

isnumeric( )函数用法

isnumeric( )还是一个很实用的函数&#xff0c;在算法题目里面应该会有比较大的作用。 检测字符串是否只由数字组成&#xff0c;如果字符串中只包括数字&#xff0c;就返回Ture&#xff0c;否则返回False。 华为的一道算法题&#xff1a; 读入一个字符串str&#xff0c;输出字…

MAE:视觉自监督2021(原理+代码)

文章目录 前言一、MAE原理遮住95%的像素后&#xff0c;仍能还原出物体的轮廓&#xff0c;效果如图&#xff1a; 二、MAE测试代码1.models_mae.py1.1 self.forward_encoder1.2 self.forward_decoder1.3 loss self.forward_loss(imgs, pred, mask) 2.run_one_image 三、MAE升级版…

​一文看尽MAE最新进展!恺明的MAE已经提出大半年,目前发展如何?

©PaperWeekly 原创 作者 | Jason研究方向 | 计算机视觉 写在前面 自去年 11 月份恺明大神提出 MAE 来&#xff0c;大家都被 MAE 简单的实现、极高的效率和惊艳的性能所吸引。近几个月&#xff0c;大家也纷纷 follow 恺明的工作&#xff0c;在 MAE 进行改进&#xff08;如…

一文解读Masked Autoencoder(MAE)

前言 论文链接&#xff1a;https://arxiv.org/pdf/2111.06377.pdf   跟李沐学AI&#xff1a;https://www.bilibili.com/video/BV1sq4y1q77t?spm_id_from333.999.0.0   如果说Vision Transformer是Transformer在CV领域的拓展&#xff0c;那么Masked Autoencoder就是BERT在C…

matlab mse mae,回归评价指标MSE、RMSE、MAE、R-Squared

前言 分类问题的评价指标是准确率,那么回归算法的评价指标就是MSE,RMSE,MAE、R-Squared。下面一一介绍 均方误差(MSE) MSE (Mean Squared Error)叫做均方误差。看公式 image.png 这里的y是测试集上的。 用 真实值-预测值 然后平方之后求和平均。 猛着看一下这个公式是不是觉…

何凯明最新一作MAE(mask掉图片的部分信息也能重建识别)

导读 凯明出品&#xff0c;必属精品。没有花里胡哨的修饰&#xff0c;MAE就是那么简单的强大&#xff0c;即结构简单但可扩展性能强大。MAE通过设计一个非对称的编码解码器&#xff0c;在预训练阶段&#xff0c;通过高比例的掩码原图&#xff0c;将可见部分输入到编码器中&…

李沐精读论文:MAE 《Masked Autoencoders Are Scalable Vision Learners》

论文&#xff1a;Masked Autoencoders Are Scalable Vision Learners 别再无聊地吹捧了&#xff0c;一起来动手实现 MAE(Masked Autoencoders Are Scalable Vision Learners) 玩玩吧&#xff01; - 知乎 参考博文&#xff1a;MAE 论文逐段精读【论文精读】 - 哔哩哔哩 神洛华…

从Transformer到ViT再到MAE

从Transformer到VIT再到MAE 引言Transfomer提出的背景模型架构具体细节Add&NormAttention&#xff1a;Multi-Head Attention自注意力机制&#xff08;self attention&#xff09;Positional Encoding ViT提出的背景&#xff1a;模型架构&#xff1a;具体细节&#xff1a;维…

MAE简记

MAE简记 文章目录 MAE简记Mask 方法EncoderDecoderTarget & LOSS Mask 方法 将图片分割成不重复的正方形patch&#xff0c;遮挡其中一部分patch(75%) Encoder 采用ViT&#xff0c;但是只对可见的没有被masked的patch使用 Decoder 以encoder的输出masked的patch作为输入…

何凯明最新一作MAE解读系列1

导读 凯明出品&#xff0c;必属精品。没有花里胡哨的修饰&#xff0c;MAE就是那么简单的强大&#xff0c;即结构简单但可扩展性能强大。MAE通过设计一个非对称的编码解码器&#xff0c;在预训练阶段&#xff0c;通过高比例的掩码原图&#xff0c;将可见部分输入到编码器中&…

基于CIFAR数据集 进行 MAE实现及预训练可视化 (CIFAR for MAE,代码权重日志全部开源,自取)

基于CIFAR数据集 进行 MAE实现及预训练可视化 &#xff08;CIFAR for MAE&#xff0c;代码权重日志全部开源&#xff0c;自取&#xff09; 文章目录 基于CIFAR数据集 进行 MAE实现及预训练可视化 &#xff08;CIFAR for MAE&#xff0c;代码权重日志全部开源&#xff0c;自取&a…

PyTorch笔记 - MAE(Masked Autoencoders) PyTorch源码

欢迎关注我的CSDN&#xff1a;https://blog.csdn.net/caroline_wendy 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/128382935 Paper&#xff1a;MAE - Masked Autoencoders Are Scalable Vision Learners 掩码的自编码器是可扩展的视觉学习器 …

何凯明新作MAE 学习笔记

【MAE与之前AI和CV领域最新工作的关系】 学习MAE视频【李沐】 He, K., Chen, X., Xie, S., Li, Y., Dollr, P., & Girshick, R. (2021). Masked autoencoders are scalable vision learners. arXiv preprint arXiv:2111.06377. 【Transformer】 Transforme纯注意力&…

MAE 代码实战详解

MAE 代码实战详解 if__name__"__main__"model.forwardmodel.forward.encordermodel.forward.decordermodel.forward.loss大小排序索引-有点神奇torch.gather if__name__“main” MAE 模型选择 def mae_vit_base_patch16_dec512d8b(**kwargs):model MaskedAutoenco…

MAE(Masked Autoencoders) 详解

MAE详解 0. 引言1. 网络结构1.1 Mask 策略1.2 Encoder1.3 Decoder 2. 关键问题解答2.1 进行分类任务怎么来做&#xff1f;2.2 非对称的编码器和解码器机制的介绍2.3 损失函数是怎么计算的&#xff1f;2.4 bert把mask放在编码端&#xff0c;为什么MAE加在解码端&#xff1f; 3. …

MAE-DET学习笔记

MAE-DET学习笔记 MAE-DET: Revisiting Maximum Entropy Principle in Zero-Shot NAS for Efficient Object Detection Abstract 在对象检测中&#xff0c;检测主干消耗了整个推理成本的一半以上。最近的研究试图通过借助神经架构搜索&#xff08;NAS&#xff09;优化主干架构…

MAE论文解读

文章目录 创新点算法原理MaskingMAE encoderMAE decoder重构目标 实验Baseline: ViT-Large.消融实验Mask token自监督方法比较迁移至目标检测任务及语义分割任务 结论 论文: 《Masked Autoencoders Are Scalable Vision Learners》 代码: https://github.com/facebookresearc…

MSE与MAE

均方误差 均方误差(MSE)是最常用的回归损失函数&#xff0c;计算方法是求预测值与真实值之间距离的平方和&#xff0c;公式如图。 下图是MSE函数的图像&#xff0c;其中目标值是100&#xff0c;预测值的范围从-10000到10000&#xff0c;Y轴代表的MSE取值范围是从0到正无穷&…