【问题标题】:ParseInt NumberFormatException on phone number电话号码上的 ParseInt NumberFormatException
【发布时间】:2012-07-31 22:12:11
【问题描述】:

尝试解析电话号码“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 类型。

【问题讨论】:

  • 电话号码不是号码。它们是字符串。首先,它们可以以一个或多个零开头。或 +。
  • 您不应将电话号码视为整数。将其视为字符串,如果要将其保存到数据库中,请将其保存为 VARCHAR

标签: java string parsing integer


【解决方案1】:

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

简单测试:

int i = 5554567899;

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

【讨论】:

  • Dangit,我查找了 int 的范围,并简单地计算了数字......我很笨,不过谢谢。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    5554567899 因为数字太大而无法放入 int。请改用Long.parseLong

    【讨论】:

      【解决方案4】:

      5554567899 超过 Integer.MAX_VALUE (2147483647)。请改用LongBigInteger

      BigInteger bigNumber = new BigInteger("5554567899");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 2015-07-21
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        相关资源
        最近更新 更多