检查字符串是否是整数

Java判断字符串是否是整数或者浮点数的方法 今天小编就为大家分享一篇Java判断字符串是否是整数或者浮点数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

 

检查字符串是否是整数

   今天在论坛中看见一个贴,讨论用异常检验字符串是否为整数,出处http://www.javaeye.com/topic/856221。个人总结了里面的方法。有如下四种:

1、  异常检测法;2、每个字符检测法;3、使用Character中的isDigit法;4、正则表达式法。个人分析比较了下这四种方法。如有错误请指出;

1、  异常检测法

代码如下:

    public static boolean validateInteger1(String str) { 

       try { 

               Integer.parseInt(str); 

            } catch (Exception ex) { 

                return false; 

            } 

            return true; 

    } 

这代码看起来简洁,容易理解,下面仔细分析下parseInt方法:

    public static int parseInt(String s, int radix)

       throws NumberFormatException

    {

        if (s == null) {

            throw new NumberFormatException("null");

        }

 

    if (radix < Character.MIN_RADIX) {

        throw new NumberFormatException("radix " + radix +

                      " less than Character.MIN_RADIX");

    }

 

    if (radix > Character.MAX_RADIX) {

        throw new NumberFormatException("radix " + radix +

                      " greater than Character.MAX_RADIX");

    }

 

    int result = 0;

    boolean negative = false;

    int i = 0, max = s.length();

    int limit;

    int multmin;

    int digit;

 

    if (max > 0) {

        if (s.charAt(0) == '-') {

       negative = true;

       limit = Integer.MIN_VALUE;

       i++;

        } else {

       limit = -Integer.MAX_VALUE;

        }

        multmin = limit / radix;

        if (i < max) {

       digit = Character.digit(s.charAt(i++),radix);

       if (digit < 0) {

           throw NumberFormatException.forInputString(s);

       } else {

           result = -digit;

       }

        }

        while (i < max) {

       // Accumulating negatively avoids surprises near MAX_VALUE

       digit = Character.digit(s.charAt(i++),radix);

       if (digit < 0) {

           throw NumberFormatException.forInputString(s);

       }

       if (result < multmin) {

           throw NumberFormatException.forInputString(s);

       }

       result *= radix;

       if (result < limit + digit) {

           throw NumberFormatException.forInputString(s);

       }

       result -= digit;

        }

    } else {

        throw NumberFormatException.forInputString(s);

    }

    if (negative) {

        if (i > 1) {

       return result;

        } else {   /* Only got "-" */

       throw NumberFormatException.forInputString(s);

        }

    } else {

        return -result;

    }

}

   花性能主要在1、异常中,2、   针对每个字符进行while循环中。

2、  每个字符检测法;

代码如下:

    public static boolean validateInteger2(String str) { 

        char[] chars = str.toCharArray(); 

        for (int i = 0; i < chars.length; i++) { 

            if ((chars[i] > '9' || chars[i] < '0') && !(i == 0 && chars[0] == '-' && chars.length > 1)) { 

                return false; 

            } 

        } 

        return chars.length > 0; 

} 

这种方法就是检测是否满足数字。

3、使用Character中的isDigit法

public static boolean validateInteger3(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; 

   } 

方法3和方法2基本相同,也是遍历每个字符,唯一的区别就是检测字符是否满足数字的条件让我们看看isDigit

    public static boolean isDigit(int codePoint) {

        boolean bDigit = false;

 

        if (codePoint >= MIN_CODE_POINT && codePoint <= FAST_PATH_MAX) {

            bDigit = CharacterDataLatin1.isDigit(codePoint);

        } else {

            int plane = getPlane(codePoint);

            switch(plane) {

            case(0):

                bDigit = CharacterData00.isDigit(codePoint);

                break;

            case(1):

                bDigit = CharacterData01.isDigit(codePoint);

                break;

            case(2):

                bDigit = CharacterData02.isDigit(codePoint);

                break;

            case(3): // Undefined

            case(4): // Undefined

            case(5): // Undefined

            case(6): // Undefined

            case(7): // Undefined

            case(8): // Undefined

            case(9): // Undefined

            case(10): // Undefined

            case(11): // Undefined

            case(12): // Undefined

            case(13): // Undefined

                bDigit = CharacterDataUndefined.isDigit(codePoint);

                break;

            case(14):

                bDigit = CharacterData0E.isDigit(codePoint);

                break;

            case(15): // Private Use

            case(16): // Private Use

                bDigit = CharacterDataPrivateUse.isDigit(codePoint);

                break;

            default:

                // the argument's plane is invalid, and thus is an invalid codepoint

                // bDigit remains false;

                break;                         

            }

        }

        return bDigit;

}

该方法是通过case的方法进行批判,这样匹配的效率比方法2中的比较要高一些,但测试结果却不如人意,当字符串全为数字并字符长度比较长时,方法2比方法3效率高。

4、正则表达式法

    public static boolean validateInteger4(String str){

     String reg="^(-?)[1-9]+//d*|0"; 

      boolean tem=false; 

         Pattern pattern = Pattern.compile(reg); 

         Matcher matcher=pattern.matcher(str); 

         tem=matcher.matches(); 

         return tem; 

}

正则表达式就不多讲了。

下面把四种方法进行比较:

代码如下:

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

 

 

public class Test {

    private static final int TIMES = 1000000;

    /**

     * 单字符时,把long设置为1

     * 当多字符时,把Long设置为100

     */

    private static final int LONG = 10000; 

    public static void main(String[] args) {

       StringBuffer str= new StringBuffer();

       for(int i=1;i<LONG;i++){

           str.append("1");//当是数字的时候设置为1当是字母时设置为a

       }

       Long startTime=System.nanoTime();

      

       for(int i=1;i<TIMES;i++){

           validateInteger1(str.toString());

       }

       System.out.println(System.nanoTime()-startTime);

    }

    public static boolean validateInteger1(String str) { 

       try { 

               Integer.parseInt(str); 

            } catch (Exception ex) { 

                return false; 

            } 

            return true; 

       } 

   

    public static boolean validateInteger2(String str) { 

        char[] chars = str.toCharArray(); 

        for (int i = 0; i < chars.length; i++) { 

            if ((chars[i] > '9' || chars[i] < '0') && !(i == 0 && chars[0] == '-' && chars.length > 1)) { 

                return false; 

            } 

        } 

        return chars.length > 0; 

    } 

    public static boolean validateInteger3(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; 

    } 

   

    public static boolean validateInteger4(String str){

     String reg="^(-?)[1-9]+//d*|0"; 

     boolean tem=false; 

         Pattern pattern = Pattern.compile(reg); 

         Matcher matcher=pattern.matcher(str); 

         tem=matcher.matches(); 

         return tem; 

    }

}

测试结果如下:

方法

检查单字符串整数时间

检查多字符串整数时间

检查单字符串非整数时间

检查多字符串非整数时间

异常检测法

2175653571

3096202439

2120862098

2865671699

每个字符检测法

97425542

583244799

43266996

292156840

使用common-lang中的StringUtils法

78209925

1509344837

19438843

184180683

正则表达式法

1862483011

5208720638

1858216885

2075793713

 

通过测试发现方法3在性能和简洁性上都比较好,因此建议检测字符串是否为整数时,使用方法3。如果谁有更好的方法,请告诉我。

 

GEO生信数据挖掘实战:从临床信息提取到多维分组可视化(聚类与PCA) 本文以GSE1297数据集为例,详细讲解了GEO生信数据挖掘中临床信息提取与分组构建的实战流程。通过R语言解析样本元数据,利用字符串处理技术从文本中精准构建疾病与对照分组,并强调使用层次聚类图和PCA图进行可视化验证,确保分组合理性与分析可靠性,为后续差异表达等高级分析奠定坚实基础。 阅读详情

相关推荐

IDEA集成selenium自动化测试(Java+Selenuim+testNG+Maven)

文章目录写在前面01 | 新建Maven项目02 | idea集成Selenium03 | 写在前面 因为软件测试的需求和博主比较经常使用Java,于是,想在Idea中集成selenuim,用Java编写测试代码,因此有了这篇文章来记录一下过程。 资源指路: java使用selenium实现模拟浏览器操作API大全 模拟登录 TestNG入门教程 感谢上面博客的大佬。 01 | 新建Maven项目 不使用骨架创建,直接点击左侧Maven,然后一路next即可。 02 | idea集成Sele

aLinxi的博客 8279

判断当前数值是整数还是小数

判断当前数值是整数还是小数 函数介绍: matches() 方法用于检测字符串是否匹配给定的正则表达式。 语法: 1 public boolean matches(String regex) 返回值: 在字符串匹配给定的正则表达式时,返回 true。 StringUtils.isBlank(String str)判断某字符串是否为空或长度为0或由空白符(whitespace) 构成。 示例如下: /** 判断是否是整数或者是小数 @param str @return true:是,false不是

weixin_44186547的博客 2256

Comsol超声空化气泡仿真入门:从零搭建模型到网格划分的完整流程

本文详细介绍了使用Comsol进行超声空化气泡仿真的完整流程,从物理基础理解到模型搭建、网格划分及求解器设置。通过具体步骤和示例代码,帮助初学者和工程师快速掌握这一关键技术,应用于医疗设备和工业清洗等领域。

weixin_29289821的博客 160

如何判断字符串能否转换为整型

如何判断字符串能否转换为整型

weixin_46949892的博客 830

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

Coding... 2851

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1209

LeetCode:整数反转(判断一个数是否超过Integer32位数的有效范围小技巧)

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer 获取整数的反转,这一步相对简单,获取x这个数的最后一个数字n,然后进行sum = sum * 10 + n这一步代码,然后不断进行循环,从而得到x

奋斗的龙猫的博客 2711

yolov26改进 | 融合改进篇 | 基于 MobileNetV4 和双向特征金字塔网络BiFPN的融合改进(全网独家首发)

本文介绍BiFPN与MobileNetV4融合改进的YOLOv26。许多模块单独使用能够涨点,但直接叠加后可能因功能重复、通道不匹配、尺度冲突而掉点,因此融合前必须理解各模块作用。MobileNetV4利用UIB与Mobile MQA构建轻量主干,提升特征提取能力;BiFPN通过可学习权重完成双向多尺度融合,强化大、中、小目标的信息交互。两者优化Backbone与Neck,功能互补、结构冲突较少。本文提供代码、配置、消融对比及Codex修改思路,MobileNetV4也可替换其他主干,便于组合实验与二次创新

Snu77的博客 239

判断double是否为整数

/** * 判断double是否是整数 * @param obj * @return */ public static boolean isIntegerForDouble(double obj) { double eps = 1e-10; // 精度范围 return obj-Math.floor(obj) < eps; }

悠闲咖啡007的博客 9482

fatal: unable to access ‘https://github.com/‘: Recv failure: Connection was reset 解决方案

本文主要介绍了fatal: unable to access ‘https://github.com/’: Recv failure: Connection was reset 解决方案,希望能对使用github的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

11、机器学习中的聚类与隐马尔可夫模型

本文介绍了机器学习中的两种重要方法:聚类算法和隐马尔可夫模型(HMM)。聚类作为无监督学习的代表,适用于发现无标签数据中的结构,常见算法包括K-均值和自组织映射(SOM),并在传感器数据分析等场景中展现应用价值。隐马尔可夫模型则是一种可解释的序列模型,用于从观测数据中推断隐藏状态,广泛应用于语音识别、自然语言处理和生物信息学等领域。文章详细讲解了HMM的核心概念如马尔可夫性质、转移与发射概率,并通过TensorFlow实现了前向算法,展示了其计算观测序列概率的动态规划思想。最后对比了两类方法的应用场景,展望

garlic的博客 179

Android Studio的随记笔记--字符串与整型

判断字符串的值是否为0 String code = "0"; if("0".toString().equals(code)){Log.i("LXH","值为零:"+code);} 判断字符串的值是否为空 String s=""; if("".equals(s.toString().trim())){Log.i("LXH","值为空:"+s);}

weixin_45208598的博客 785

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 345

javacript检查是否为正整数,检查是否是合法的字符串,计算一个字符串的字节长度

/**  * 检查是否为正整数  * @param n 被检查的字符  */ globalObject.isPositiveInteger = function(n) {   var r = false;   var p = new RegExp("^[1-9][0-9]{0,}$");   r = p.test(n);   if (r) {     if (n      

李蔚生的学习站 337

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java 判断字符串是否是整数_检查字符串是否表示Java中的整数的最佳方法是什么?...

因为人们可能还会访问这里,并且在基准测试之后会对Regex产生偏见.因此,我将给出基准测试的更新版本,以及Regex的编译版本。与以前的基准测试相反,这个测试显示Regex解决方案实际上一直具有良好的性能。复制自“蜥蜴比尔”并以编译版本更新:privatefinalPatternpattern=Pattern.compile("^-?\\d+$");publicvoidrunTest...

weixin_29485605的博客 195

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2、检查一个字符是否是整数或者4行代码从一个字符串到长整形函数

/************************************************************************/ /* 2、检查一个字符是否是整数或者4行代码从一个字符串到长整形函数       */ /************************************************************************/ //用

1293

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

计算机笔试题:写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整型的函数)

写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整型的函数) #include "stdafx.h"#include #include #include #include using namespace std;long strtoint(char *str,int length);int main(int argc, cha

DORIS1984的专栏 3539

写一个函数,检查字符是否是整数,如果是,返回其整数值(或:怎样只用4行代码编写出一个从字符串到长整型的函数)

方法1:#include #include #include #include using namespace std; long strtoint(char *str,int length); int main(int argc, char* argv[]) { int i=0; char str[100]; while ((str[i]=getchar())!='0') {

小憩一下 935

写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)

由于错误情况比较复杂,所有对错误情况并无处理(正确的字符串可以正确返回)     #include "stdio.h" #include "stdlib.h" #include "string.h"     long strtoint(char* str, int len) {         if(len > 1) {               

我的E家 1044

java正整数正则表达式_如何使用正则表达式检查字符串是否是一个不以0开头的正整数?...

经过大量研究后,我还没有发现满足所有这些IF条件的正则表达式 . 代码效果很好,但我认为可以使用RegEx简化 .目标:在1到9之间的正整数上返回true,而不是从零开始 . 为每个其他值返回false .看一看 .// Validation functionsfunction hasPeriod(s) {// Return true or false.// True if a period is...

weixin_42503076的博客 972

题目:给定一个十进制的整数字符串,判断是否是4的幂代码实现

【代码】给定一个十进制的整数字符串,判断是否是4的幂。

weixin_47263611的博客 229

回文数是一个正向和逆向都相同的整数,如123454321,9889.编写函数判断一个整数是否为回文数

【代码】回文数是一个正向和逆向都相同的整数,如123454321,9889.编写函数判断一个整数是否为回文数。

m0_68442003的博客 709

判断是否是回文数字(重点:双指针)

static boolean isH(int n) { String s=String.valueOf(n);//n是个整数,将整数转化为字符串 char []c=s.toCharArray();//将字符串对象中的字符转换为一个字符数组 int font=0; int after=c.length-1; for(int i=0;i<c.length;i++) { while(font<af.

qq_53950993的博客 190
上一篇: 转:HDFS+MapReduce+Hive+HBase十分钟快速入门(一)
下一篇: 堆排序
noOnlyAndroid
博客等级 码龄16年 26粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值