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

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比较方便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值