java 判斷字符串是否為數字

正則表達式

方法一:

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源碼:

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在經過一次沒有準備的面試后,發現自己雖然寫了兩年的android代碼,基礎知識卻忘的差不多了。這是程序員的大忌,沒...
    猿來如癡閱讀 2,872評論 3 10
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態方法,可以作為本類的靜態方法來...
    XLsn0w閱讀 1,267評論 0 2
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,526評論 0 3
  • 六種異常處理的陋習 你覺得自己是一個Java專家嗎?是否肯定自己已經全面掌握了Java的異常處理機制?在下面這段代...
    Executing閱讀 1,367評論 0 6
  • 鄉村里的農民都是日出而作,日落而息,夕陽像個守財奴似的慢慢把天邊的霞暉收入囊中。父親扛著鋤頭回來了,嘴里一邊問著...
    zxy_趙小丫閱讀 538評論 3 2