java-判断字符串是否为数字

Java数字验证方法
本文介绍了五种不同的方法来判断一个字符串是否只包含数字字符。这些方法包括使用正则表达式、Java内置函数、ASCII码值判断、逐个字符比对以及通过捕获NumberFormatException异常等。文章深入探讨了每种方法的实现细节及其优缺点。

正则表达式

方法一:

public static boolean isNumeric1(String str) {
  Pattern pattern =Pattern.compile("[0-9]*");
  return pattern.matcher(str).matches();
}

方法二:

public static boolean isNumeric(String str) {
  if(str.matches("\\d*")) {
    return true;
  } else {
    return false;
  }
}

java自带函数

public static boolean isNumeric(String str) {
  for (int i = str.length();--i>=0;) {
    if(!Character.isDigit(str.charAt(i))){
      returnfalse;
    }
  }
  return true;
}

判断ASCII码值

public static boolean isNumeric(String str) {
  for (int i = str.length(); --i>=0;) {
    intchr = str.charAt(i);
    if(chr < 48 || chr > 57)
    return false;
  }
  return true;
}

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

public static boolean isNumeric3(String str) {
  final String number = "0123456789";
  for(int i = str.length(); --i>=0;) {
    if(number.indexOf(str.charAt(i)) ==-1){
      return false; 
    }
  }
  return true;
}

捕获NumberFormatException异常

public static boolean isNumeric00(String str) {
  try{
    Integer.parseInt(str);
    return true;
  } catch (NumberFormatExceptione) {
    System.out.println("异常:\""+ str + "\"不是数字/整数...");
    return false;
  }
}

不提倡使用方法6,原因如下:
1. NumberFormatException是用来处理异常的,最好不要用来控制流程的。
2. 虽然捕捉一次异常很容易,但是创建一次异常会消耗很多的系统资源,因为它要给整个结构作一个快照。

看一下JDK源码:
java
public static long parseLong(String s,intradix)
throwsNumberFormatException
{
if(s ==null){
throw new NumberFormatException("null");
}
if(radix
throw new NumberFormatException("radix " + radix +
" less thanCharacter.MIN_RADIX");
}
if(radix >Character.MAX_RADIX){
throw new NumberFormatException("radix " + radix +
" greater thanCharacter.MAX_RADIX");
}
long result =0;
boolean negative = false;
int i = 0,max =s.length();
long limit;
longmultmin;
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
digit =Character.digit(s.charAt(i++),radix);
if(digit < 0){
throw newNumberFormatException(s);
}else{
result = -digit;
}
}
while(i
// Accumulating negatively avoidssurprises near MAX_VALUE
digit =Character.digit(s.charAt(i++),radix);
if(digit <0){
throw newNumberFormatException(s);
}
if(result
throw newNumberFormatException(s);
}
result *=radix;
if(result < limit +digit){
throw newNumberFormatException(s);
}
result -=digit;
}
}else{
throw new NumberFormatException(s);
}
if(negative){
if(i >1){
return result;
}else{
throw newNumberFormatException(s);
}
}else{
return -result;
}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值