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

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

回到顶部