最近遇到判斷數字的問題,簡單總結了一下和大家分享~
//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,所以還不如這個工作由我們自己來做,還省得再拋出一次異常...
未完,待大家一起續~~~歡迎大家共享好的方法~~~