• 技术文章 >Java >Java基础

    java判断变量是不是数字方法总结

    尚2019-11-25 10:34:36原创1952

    java判断变量是不是数字方法:(相关视频课程推荐:java视频教程

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

    更多java相关文章请关注java基础教程

    以上就是java判断变量是不是数字方法总结的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java
    上一篇:java生成不重复的随机数方法总结 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • JavaScript之undefined与null的区别(详解)• Java Map的基本用法• java mail发送邮件出现乱码• java中的表达式i++和++i的区别
    1/1

    PHP中文网