输入字符串999999999的数字格式异常



这是我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'的错误

如何解决。

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

9999999999超出了

int数据类型(-231 到 231-1,含)的有效值范围,由 Integer.MIN_VALUEInteger.MAX_VALUE 常量指定。

您不能在int中表示完整的电话号码,则必须省略前缀和区号 (0000000 - 9999999)。 否则,请改用long(-2 63 到 263-1,包括 -263-1),Long.parseLong()会很乐意处理9999999999

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

因此,如果您坚持将电话号码从String转换为数字,请尝试Long.parseLong("9999999999")。将电话号码存储和操作为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;
}

祝你好运。

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

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

检查 Oracles 文档中的 parseInt() 方法parseInt

它清楚地说

如果发生以下任何情况,则会引发类型为 NumberFormatException 的异常:

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

字符串的任何字符都不是指定基数的数字, 除了第一个字符可以是减号"-"("\u002D")或 加号"+"("\u002B"),前提是字符串长度小于 长度 1.字符串表示的值不是类型的值 国际。

例子:

 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

最新更新