我在尝试解析电话号码时收到以下错误," 5554567899"
java.lang.NumberFormatException: For input string: "5554567899"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:495)
at java.lang.Integer.parseInt(Integer.java:527)
...
显然,电话号码可以解析。我甚至引用了this question,字节码结果是
53,53,53,52,53,54,55,56,57,57,
因此字符串中没有不可见的字符。我很难过,有人可以帮忙吗?
以下是引发错误的代码部分,供参考:
String fullNumber = null;
for(Phone phone : party.getPhones()) {
if(phone != null && !phone.getDialNumber().isEmpty()) {
if(!phone.getAreaCode().isEmpty()) {
fullNumber = phone.getAreaCode();
}
fullNumber += phone.getDialNumber();
if(phone1 == null || phone1.equals(0)) {
LOGGER.debug(displayCharValues(fullNumber));
phone1 = Integer.parseInt(fullNumber);
}
}
phone1
属于Java.lang.Integer
类型。
答案 0 :(得分:6)
该值超出了int范围。将其解析为长变量。
简单测试:
int i = 5554567899;
是编译时错误:“int类型的文字5554567899超出范围”
答案 1 :(得分:1)
5554567899作为一个数字太大而不适合int。请改为Long.parseLong
。
答案 2 :(得分:1)
5554567899
超过Integer.MAX_VALUE
(2147483647)。请改用Long
或BigInteger
:
BigInteger bigNumber = new BigInteger("5554567899");
答案 3 :(得分:1)
真的不应该将电话号码视为一个数字,而是作为一个字符串或可能作为您自己定义的数据类型,打破国家代码,区号,交换等。
如果要验证它只包含数字或数字加上一些标准的电话号码分隔符,可以通过正则表达式来完成。
我们将其称为电话号码,它是一个数字字符串,但由于用法不是用于数值计算,因此最好不要尝试将其视为数字。
“社会安全号码”也是如此。