java判斷變量是否是數字

最近遇到判斷數字的問題,簡單總結了一下和大家分享~

 

//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,所以還不如這個工作由我們自己來做,還省得再拋出一次異常... 


 未完,待大家一起續~~~歡迎大家共享好的方法~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章