1.用JAVA自带的函数

public static boolean isNumeric(String str){

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

System.out.println(str.charAt(i));

if (!Character.isDigit(str.charAt(i))){

return false;

}

}

return true;

}

2.用正则表达式

首先要import java.util.regex.Pattern 和 java.util.regex.Matcher

public boolean isNumeric(String str){

Pattern pattern = Pattern.compile("[0-9]*");

Matcher isNum = pattern.matcher(str);

if( !isNum.matches() ){

return false;

}

return true;

}

3.使用org.apache.commons.lang

org.apache.commons.lang.StringUtils;

boolean isNunicodeDigits=StringUtils.isNumeric("aaa123456789");

http://jakarta.apache.org/commons/lang/api-release/index.html下面的解释:

isNumeric

public static boolean isNumeric(String str)Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false.

null will return false. An empty String ("") will return true.

StringUtils.isNumeric(null)   = false

StringUtils.isNumeric("")     = true

StringUtils.isNumeric(" ")   = false

StringUtils.isNumeric("123") = true

StringUtils.isNumeric("12 3") = false

StringUtils.isNumeric("ab2c") = false

StringUtils.isNumeric("12-3") = false

StringUtils.isNumeric("12.3") = false

Parameters:

str - the String to check, may be null

Returns:

true if only contains digits, and is non-null

上面三种方式中,第二种方式比较灵活。

第一、三种方式只能校验不含负号“-”的数字,即输入一个负数-199,输出结果将是false;

而第二方式则可以通过修改正则表达式实现校验负数,将正则表达式修改为“^-?[0-9]+”即可,修改为“-?[0-9]+.?[0-9]+”即可匹配所有数字。

如果我输入的是"a“,它能识别出来这个不是数字,该怎么写?

import java.io.* ;

import java.util.* ;

public class Test{

public static void main(String [] args) throws Exception{

System.out.println("请输入数字:");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String line=br.readLine();

if(line.matches("\\d+"))     //正则表达式 详细见java.util.regex 类 Pattern

System.out.println("数字");

else

System.out.println("非数字");

}

}

("\d")是数字0-9 ("\\d+")是什么意思?

正则表达式用两个斜杠表示一个斜杠,后面跟着一个加号表示出现一次或多次,完整的意思就是整个字符串中仅包含一个或多个数字。

//4、判断ASCII码值

public static boolean isNumeric0(String str){

for(int i=str.length();--i>=0;){

int chr=str.charAt(i);

if(chr<48 || chr>57)

return false;

}

return true;

}

//5、逐个判断str中的字符是否是0-9

public static boolean isNumeric3(String str){

final String number = "0123456789";

for(int i = 0;i

if(number.indexOf(str.charAt(i)) == -1){

return false;

}

}

return true;

}

//6、捕获NumberFormatException异常

public static boolean isNumeric00(String str){

try{

Integer.parseInt(str);

return true;

}catch(NumberFormatException e){

System.out.println("异常:\"" + str + "\"不是数字/整数...");

return false;

}

}

ps:不提倡使用方法6,原因如下:

1、NumberFormatException是用来处理异常的,最好不要用来控制流程的。

2、虽然捕捉一次异常很容易,但是创建一次异常会消耗很多的系统资源,因为它要给整个结构作一个快照。

看一下JDK源码:

public static long parseLong(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");

}

long result = 0;

boolean negative = false;

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

long limit;

long multmin;

int digit;

if(max > 0){

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

negative = true;

limit = Long.MIN_VALUE;

i++;

}else{

limit = -Long.MAX_VALUE;

}

multmin = limit / radix;

if(i < max){

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

if(digit < 0){

throw new NumberFormatException(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 new NumberFormatException(s);

}

if(result < multmin){

throw new NumberFormatException(s);

}

result *= radix;

if(result < limit + digit){

throw new NumberFormatException(s);

}

result -= digit;

}

}else{

throw   new   NumberFormatException(s);

}

if(negative){

if(i > 1){

return result;

}else{

throw new NumberFormatException(s);

}

}else{

return   -result;

}

}

可以看出来jdk里也是一个字符一个字符的判断,如果有一个不是数字就抛出NumberFormatException,所以还不如这个工作由我们自己来做,还省得再抛出一次异常...

用4比较方便

java判断string是数字_(转)java判断string变量是否是数字的六种方法小结相关推荐

  1. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. java string最大长度_一个Java字符串中到底有多少个字符?

    作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...

  3. java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...

    利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置, 目的: (学习视频分享:java视频教程 实现代码如下: 导入Java.util.收藏品: 导入Java.util.LinkedLi ...

  4. android string拼接字符串_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

    Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...

  5. 判断类型是否继承_【Java学习 | Javase】继承与多态

    整理自:老师课件.<Java核心技术> 继承与多态 继承 概念 父类/超类 所有子集的公共域和公共方法的集合 子类 父类的特殊化,是对公共域和方法在功能.内涵方面的拓展和延伸 object ...

  6. java输入数字_在java中,如何从键盘中输入数字,字符,字符串

    java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象. 常用的类有BufferedReader,Scanner. 实例程序: 一,利用 Scanner 实现从键盘读入inte ...

  7. java map判断是否有键_检查Java HashMap中是否存在给定键

    使用该containsKey()方法并检查HashMap中是否存在给定键. 让我们首先创建HashMap并添加一些元素-//创建一个哈希映射 HashMap hm = new HashMap(); / ...

  8. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  9. java求最后一位不为0的数字_【Java】 剑指offer(62) 圆圈中最后剩下的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 0, 1, -, n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字 ...

最新文章

  1. ORL Faces Database介绍
  2. Vim Vundle 插件管理器
  3. BigDecimalf大小的比较
  4. 更改hostname后vnc无法进入图形界面
  5. BZOJ 4849 [NEERC2016]Mole Tunnels (模拟费用流)
  6. VTK:可视化之CursorShape
  7. 身体好不是锻炼出来的
  8. oracle11g安装
  9. 精心收集的jQuery常用的插件1000
  10. IS-IS快速收敛调优(二)——链路故障检测、LSP智能定时器和SPF智能定时器
  11. 深圳大学计算机与软件学院李志,李志彬
  12. 各版本delphi下载
  13. linux下安装tecplot记录
  14. 2017年第八届CSTQB®国际软件测试高峰论坛议题征集启动
  15. 转载_ANC降噪学习
  16. 2020十大高薪资专业和十大高薪资岗位---(之我给程序员丢人了)
  17. Harvard (name and date) 论文引用格式
  18. xcode6.3设备无法运行Ineligible Devices的解决方法
  19. Linux:使用upower命令查看电池信息
  20. vue父传子mounted问题

热门文章

  1. 华为系统是计算机类型吗,华为Mate10秒变PC能否开启手机取代PC时代
  2. 耳朵经济下,有声读物的加与减
  3. socket事例代码
  4. 酒店智能联网门锁解决方案
  5. 常用虚拟机服务器系统,VM虚拟机10/11+各种纯净虚拟机系统镜像完整版
  6. TWS耳机背后的推手
  7. QT PRO工程文件区分Debug和Release方法
  8. 中国军工电子行业运营模式及十四五发展规划咨询建议报告2022-2027年
  9. ruoyi 页面跳转_若依及vue-element-admin vue 管理系统第三方拼多多登录
  10. springboot框架开发医院云HIS 住院医生站、住院护士站功能实现