美文网首页
java 判断字符串是否为数字

java 判断字符串是否为数字

作者: 低至一折起 | 来源:发表于2017-12-05 19:58 被阅读0次

    正则表达式

    方法一:

    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自带函数

    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;
    }
    

    逐个判断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 + "\"不是数字/整数...");
        return false;
      }
    }
    

    不提倡使用方法6,原因如下:

    1. NumberFormatException是用来处理异常的,最好不要用来控制流程的。
    2. 虽然捕捉一次异常很容易,但是创建一次异常会消耗很多的系统资源,因为它要给整个结构作一个快照。

    看一下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; 
    } 
    }
    

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

    相关文章

      网友评论

          本文标题:java 判断字符串是否为数字

          本文链接:https://www.haomeiwen.com/subject/ggthixtx.html