• (转)java判断string变量是否是数字的六种方法小结


    java判断string变量是否是数字的六种方法小结

     (2012-10-17 17:00:17)
    标签: 

    it

    分类: 转发
    1.用JAVA自带的函数
    public static boolean isNumeric(String str){
    for (int i = 0; i < str.length(); i++){
       System.out.println(str.charAt(i));
       if (!Character.isDigit(str.charAt(i))){
        return false;
       }
    }
    return true;
    }
     
    2.用正则表达式
    首先要import java.util.regex.Pattern 和 java.util.regex.Matcher
    public boolean isNumeric(String str){
       Pattern pattern = Pattern.compile("[0-9]*");
       Matcher isNum = pattern.matcher(str);
       if( !isNum.matches() ){
           return false;
       }
       return true;
    }
     
    3.使用org.apache.commons.lang
    org.apache.commons.lang.StringUtils;
    boolean isNunicodeDigits=StringUtils.isNumeric("aaa123456789");
    http://jakarta.apache.org/commons/lang/api-release/index.html下面的解释:
    isNumeric
    public static boolean isNumeric(String str)Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false.
    null will return false. An empty String ("") will return true.
    StringUtils.isNumeric(null)   = false
    StringUtils.isNumeric("")     = true
    StringUtils.isNumeric(" ")   = false
    StringUtils.isNumeric("123") = true
    StringUtils.isNumeric("12 3") = false
    StringUtils.isNumeric("ab2c") = false
    StringUtils.isNumeric("12-3") = false
    StringUtils.isNumeric("12.3") = false
     
    Parameters:
    str - the String to check, may be null
    Returns:
    true if only contains digits, and is non-null
     
    上面三种方式中,第二种方式比较灵活。
     
    第一、三种方式只能校验不含负号“-”的数字,即输入一个负数-199,输出结果将是false;
     
    而第二方式则可以通过修改正则表达式实现校验负数,将正则表达式修改为“^-?[0-9]+”即可,修改为“-?[0-9]+.?[0-9]+”即可匹配所有数字。
     
    如果我输入的是"a“,它能识别出来这个不是数字,该怎么写?
     
    import java.io.* ;
    import java.util.* ;
    public class Test{
    public static void main(String [] args) throws Exception{
    System.out.println("请输入数字:");
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       String line=br.readLine();
     
        if(line.matches("\d+"))     //正则表达式 详细见java.util.regex 类 Pattern
       System.out.println("数字");
       else
       System.out.println("非数字");
    }
    }
     
    ("d")是数字0-9 ("\d+")是什么意思?
    正则表达式用两个斜杠表示一个斜杠,后面跟着一个加号表示出现一次或多次,完整的意思就是整个字符串中仅包含一个或多个数字。
     
     
        //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,所以还不如这个工作由我们自己来做,还省得再抛出一次异常... 
     
     
    用4比较方便
  • 相关阅读:
    剑指Offer_08_跳台阶
    剑指Offer_07_斐波那契数列
    HDU 4283 You Are the One
    1B. Spreadsheets
    1A Theatre Square
    HDU 2476 String painter(记忆化搜索, DP)
    LightOJ 1422 Halloween Costumes(记忆化搜索)
    POJ 1651 Multiplication PuzzleDP方法:
    POJ 2955 Brackets (区间DP)
    HDU 5452 Minimum Cut
  • 原文地址:https://www.cnblogs.com/luolizhi/p/4946018.html
Copyright © 2020-2023  润新知