`

java判断数字

 
阅读更多

 

Java正则表达式JDK工作

最近遇到判断数字的问题,简单总结了一下和大家分享~

 

//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{  

      throw new NumberFormatException(s);  

     }  

    }else{  

     return   -result;  

    }  

 }  

 可以看出来jdk里也是一个字符一个字符的判断,如果有一个不是数字就抛出NumberFormatException,所以还不如这个工作由我们自己来做,还省得再抛出一次异常... 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics