使用Long.valueOf("XXX")转换时,参数的校验

2,420 阅读1分钟

问题

在使用Long.valueOf()方法,除了要进行判空,还要进行是否为数字的判断,如果传递非数字的参数,就会报错:NumberFormatException异常。

方法

方法1

public static boolean isNumeric(CharSequence cs) {
    if (isEmpty(cs)) {
        return false;
    } else {
        int sz = cs.length();

        for(int i = 0; i < sz; ++i) {
            if (!Character.isDigit(cs.charAt(i))) {
                return false;
            }
        }

        return true;
    }
}

方法1,实际上是commons包中提供的,这个方法没发验证为负数的数字;使用时需要引入jar包:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

方法2

public boolean isNumeric(String str){ 
   Pattern pattern = Pattern.compile("[0-9]*"); 
   Matcher isNum = pattern.matcher(str);
   if( !isNum.matches() ){
       return false; 
   } 
   return true; 
}

其他

第一种方式只能校验不含负号“-”的数字,即输入一个负数-199,输出结果将是false;

而第二方式则可以通过修改正则表达式实现校验负数,将正则表达式修改为“^-?[0-9]+”即可,修改为“-?[0-9]+.?[0-9]+”即可匹配所有数字