这是我的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'
如何解决。
即使它是一个数字,为什么我不能解析它?
答案 0 :(得分:2)
int
超出int
数据类型的有效值范围(-2 31 到2 31 -1,包括端值) ,由Integer.MIN_VALUE
和Integer.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
。将电话号码存储和操作为int
或long
将导致将来出现一些不一致。
如果您这样做是为了检查所有输入字符是否都是数字,您可以使用其他方式,例如使用正则表达式。这种方式非常有用,因为您可以检查格式,分隔符等。请参阅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,648
到2,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