1

尝试解析电话号码“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)
...

显然,电话号码是能够被解析的。我什至引用了这个问题,字节码结果是

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);
                }
         }

phone1Java.lang.Integer类型。

4

4 回答 4

7

该值超出了 int 范围。将其解析为一个长变量。

简单测试:

int i = 5554567899;

是编译时错误:“int 类型的文字 5554567899 超出范围”

于 2012-07-31T22:14:11.067 回答
2

实际上,电话号码根本不应该被视为一个数字,而应该被视为一个字符串,或者可能是一个您自己定义的数据类型,包括国家代码、区号、交易所等。

如果你想验证它是否只包含数字或数字加上一些标准的电话号码分隔符,这可以通过正则表达式来完成。

我们称它为电话号码,它是一个数字字符串,但由于它不用于数字计算,因此最好不要将其视为数字。

“社会安全号码”也是如此。

于 2012-07-31T22:22:06.577 回答
1

5554567899 作为一个数字太大而无法放入 int 中。试试Long.parseLong吧。

于 2012-07-31T22:14:12.487 回答
1

5554567899超过Integer.MAX_VALUE(2147483647)。使用LongorBigInteger代替:

BigInteger bigNumber = new BigInteger("5554567899");
于 2012-07-31T22:15:21.767 回答