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

来源:互联网 发布:淘宝ugg官方旗舰店 编辑:程序博客网 时间:2024/05/16 07:13
判断字符串是否为数字

 

//1、正则表达式
 public static boolean isNumeric1(Stringstr){
  Pattern pattern =Pattern.compile("[0-9]*");
  returnpattern.matcher(str).matches();
 }
 //2、java自带函数
 public static boolean isNumeric2(Stringstr){
  for (int i =str.length();--i>=0;){
   if(!Character.isDigit(str.charAt(i))){
    returnfalse;
   }
  }
  returntrue;
 }
 //3、正则表达式
 public static boolean isNumeric(Stringstr){
  if(str.matches("\\d*")){
   returntrue;
  }else{
   returnfalse;
  }
 }
   //4、判断ASCII码值
 public static boolean isNumeric0(Stringstr){
  for(inti=str.length();--i>=0;){
   intchr=str.charAt(i);
   if(chr<48|| chr>57)
    returnfalse;
  }
  returntrue;
 }
   //5、逐个判断str中的字符是否是0-9
 public static boolean isNumeric3(Stringstr){
  final Stringnumber = "0123456789";
  for(int i =0;i 
           if(number.indexOf(str.charAt(i)) ==-1){  
            returnfalse;  
            
   
  returntrue;
 }
   //6、捕获NumberFormatException异常
 public static boolean isNumeric00(Stringstr){
  try{
   Integer.parseInt(str);
   returntrue;
  }catch(NumberFormatExceptione){
   System.out.println("异常:\""+ str + "\"不是数字/整数...");
   returnfalse;
  }
 }
 
 ps:不提倡使用方法6,原因如下:
   1、NumberFormatException是用来处理异常的,最好不要用来控制流程的。  
   2、虽然捕捉一次异常很容易,但是创建一次异常会消耗很多的系统资源,因为它要给整个结构作一个快照。 
 看一下JDK源码:
 public static long parseLong(String s,intradix)  
        throwsNumberFormatException  
  
   if(s ==null){  
      throw  new  NumberFormatException("null");  
    
   if(radix <Character.MIN_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 <max){  
     digit =Character.digit(s.charAt(i++),radix);  
     if(digit < 0){
           throw newNumberFormatException(s);  
     }else{  
           result = -digit;
      
     
    while(i <max){  
     // Accumulating negatively avoidssurprises near MAX_VALUE
     digit =Character.digit(s.charAt(i++),radix);  
     if(digit <0){  
      throw newNumberFormatException(s);  
      
     if(result <multmin){  
      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,所以还不如这个工作由我们自己来做,还省得再抛出一次异常... 

原创粉丝点击