输入字符串999999999的NumberFormatexception

时间:2016-06-01 03:30:10

标签: java parsing

这是我的html代码

<div class="form-group col-md-6">
    <input type="text" class="form-control" name="phonenumber" placeholder="Enter Phone Number">
</div>

这是我的controller

int phonenumber=Integer.parseInt(request.getParameter("phonenumber").trim());

我得到了NumberFormatException for input string '9999999999'

的错误

如何解决。

即使它是一个数字,为​​什么我不能解析它?

4 个答案:

答案 0 :(得分:2)

int超出int数据类型的有效值范围(-2 31 到2 31 -1,包括端值) ,由Integer.MIN_VALUEInteger.MAX_VALUE常量指定。

您无法代表long中的完整电话号码,您必须省略前缀和区号(0000000 - 9999999)。否则,使用Long.parseLong()代替(-2 63 至2 63 -1,包括在内),9999999999将很乐意处理if(!empty($error)){echo $error;}

答案 1 :(得分:1)

Exception,因为您尝试将'9999999999'转换为整数,int类型的最大范围为2147483647

如果您坚持将Long.parseLong("9999999999")的电话号码转换为数字,请尝试使用String。将电话号码存储和操作为intlong将导致将来出现一些不一致。

如果您这样做是为了检查所有输入字符是否都是数字,您可以使用其他方式,例如使用正则表达式。这种方式非常有用,因为您可以检查格式,分隔符等。请参阅MKyoung站点中的此示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidatePhoneNumber {
  public static void main(String[] argv) {

      String sPhoneNumber = "605-8889999";
      //String sPhoneNumber = "605-88899991";
      //String sPhoneNumber = "605-888999A";

      Pattern pattern = Pattern.compile("\\d{3}-\\d{7}");
      Matcher matcher = pattern.matcher(sPhoneNumber);

      if (matcher.matches()) {
          System.out.println("Phone Number Valid");
      }
      else
      {
          System.out.println("Phone Number must be in the form XXX-XXXXXXX");
      }
 }
}

另一种简单的方法是使用一种方法来检查电话号码的所有数字是否真的是数字:

public boolean isAllCharactersDigit(String phoneNumber){
    for(char c: phoneNumber.toCharArray()){
        if(!Character.isDigit(c))
            return false;
    }
    return true;
}

祝你好运。

答案 2 :(得分:0)

Java中int的范围是-2,147,483,6482,147,483,647

9,999,999,999超出范围,这就是导致异常的原因。

答案 3 :(得分:0)

检查Oracles doc中的parseInt()方法 parseInt

它清楚地说

如果出现以下任何一种情况,则抛出NumberFormatException类型的异常:

  

第一个参数为null或者是长度为零的字符串。基数是   或小于Character.MIN_RADIX或大于   Character.MAX_RADIX。

     

字符串的任何字符都不是指定基数的数字,   除了第一个字符可能是减号' - '('\ u002D')或   加号'+'('\ u002B'),条件是字符串长于   length 1.字符串表示的值不是type的值   中间体

<强>示例:

 parseInt("0", 10) returns 0
 parseInt("473", 10) returns 473
 parseInt("+42", 10) returns 42
 parseInt("-0", 10) returns 0
 parseInt("-FF", 16) returns -255
 parseInt("1100110", 2) returns 102
 parseInt("2147483647", 10) returns 2147483647
 parseInt("-2147483648", 10) returns -2147483648
 parseInt("2147483648", 10) throws a NumberFormatException
 parseInt("99", 8) throws a NumberFormatException
 parseInt("Kona", 10) throws a NumberFormatException
 parseInt("Kona", 27) returns 411787