zoukankan      html  css  js  c++  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,所以还不如这个工作由我们自己来做,还省得再抛出一次异常... 

  • 相关阅读:
    c#使用SoundPlayer播放wav格式音频
    c#NAudio 录音功能实现
    c#异步方法调用
    c# 读取文件目录下的信息
    angular笔记_1
    js获取form元素,不使用id
    事物回滚机制
    ckplayer跨域调用
    帝国移动pc站文章
    页面切换导航样式也随之改变
  • 原文地址:https://www.cnblogs.com/dirgo/p/5006538.html
Copyright © 2011-2022 走看看