④Java判断变量是否是数字

来源:互联网 发布:贷款电销软件 编辑:程序博客网 时间:2024/06/05 18:18

最近遇到判断数字的问题,简单总结了一下和大家分享~

 

1、正则表达式
 public static boolean isNumeric1(String str){ 
  Pattern pattern = Pattern.compile("[0-9]*"); 
  return pattern.matcher(str).matches(); 
 }
2、java自带函数
 public static boolean isNumeric2(String str){ 
  for (int i = str.length();--i>=0;){ 
   if (!Character.isDigit(str.charAt(i))){
    return false; 
   } 
  }
  return true; 
 }
3、正则表达式
 public static boolean isNumeric(String str){ 
  if(str.matches("\\d *")){
   return true; 
  }else{
   return false;
  }
 }
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<str.length();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{/* Only got "-" */   
      throw new NumberFormatException(s);   
     }   
    }else{   
     return   -result;   
    }   
 }   
 可以看出来jdk里也是一个字符一个字符的判断,如果有一个不是数字就抛出NumberFormatException,所以还不如这个工作由我们自己来做,还省得再抛出一次异常... 

0 0
原创粉丝点击