正則表達(dá)式
方法一:
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自帶函數(shù)
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;
}
逐個(gè)判斷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 + "\"不是數(shù)字/整數(shù)...");
return false;
}
}
不提倡使用方法6,原因如下:
- NumberFormatException是用來(lái)處理異常的,最好不要用來(lái)控制流程的。
- 雖然捕捉一次異常很容易,但是創(chuàng)建一次異常會(huì)消耗很多的系統(tǒng)資源,因?yàn)樗o整個(gè)結(jié)構(gòu)作一個(gè)快照。
看一下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;
}
}
可以看出來(lái)jdk里也是一個(gè)字符一個(gè)字符的判斷,如果有一個(gè)不是數(shù)字就拋出NumberFormatException,所以還不如這個(gè)工作由我們自己來(lái)做,還省得再拋出一次異常...