[转]Java中怎样判断一个字符串能否转成数字

原文地址:http://blog.sina.com.cn/s/blog_7bac470701014mjf.html
判断字符串是否为数字
//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 
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{  
throw new
NumberFormatException(s);  
}  
}else{  
return
-result;  
}  
 }  
可以看出来jdk里也是一个字符一个字符的判断,如果有一个不是数字就抛出NumberFormatException,所以还不如这个工作由我们自己来做,还省得再抛出一次异常...
以上是 [转]Java中怎样判断一个字符串能否转成数字 的全部内容, 来源链接: utcz.com/z/392233.html
