【问题标题】:Cannot convert String to Integer in Java [duplicate]无法在Java中将字符串转换为整数[重复]
【发布时间】:2011-03-31 20:50:06
【问题描述】:

我写了一个将字符串转换为整数的函数

   if ( data != null )
   {
        int theValue = Integer.parseInt( data.trim(), 16 );
        return theValue;
   }
   else
       return null;

我有一个字符串 6042076399,它给了我错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "6042076399"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:461)

这不是将字符串转换为整数的正确方法吗?

【问题讨论】:

  • 请注意,通过将 16 指定为 parseInt 的第二个参数,您将字符串解析为十六进制数。

标签: java numberformatexception


【解决方案1】:

这是我喜欢的方式:

编辑(2015 年 8 月 4 日):

正如下面评论中所指出的,实际上这样做更好:

String numStr = "123";
int num = Integer.parseInt(numStr);

【讨论】:

  • 除非事情发生了变化,否则Integer.parseInt() 是首选方法,因为它会缓存常用值以提高性能。创建一个新的 Integer 总是会创建一个新的 Integer 对象。但是,这是 Java 5 之前的版本 - 如果现在两者都做同样的事情,我不会感到惊讶。
【解决方案2】:

Integer 无法保存该值。 6042076399(十进制的413424640921)大于2147483647,一个整数可以容纳的最大值。

尝试使用Long.parseLong

【讨论】:

  • 他使用原始类型。我会在Long 之前推荐long。我什至可能会在Long 之前推荐BigInteger,尽管我对此并不完全确定。
【解决方案3】:

除了其他人回答的内容外,如果您的字符串超过 8 个十六进制数字(但最多 16 个十六进制数字),您可以使用 Long.parseLong() 将其转换为 long 而不是使用 @987654322 的 int @。

【讨论】:

    【解决方案4】:

    这是正确的方法,但您的值大于int 的最大大小。

    int 可以容纳的最大大小是 231 - 1 或 2,147,483,647。你的价值是 6,042,076,399。如果您想要原始类型,您应该考虑将其存储为long。 long 的最大值明显更大 - 263 - 1。另一个选项可能是BigInteger

    【讨论】:

      【解决方案5】:

      该字符串大于 Integer.MAX_VALUE。您无法解析超出整数范围的内容。 (我相信它们会上升到 2^31-1)。

      【讨论】:

        猜你喜欢
        • 2014-04-18
        • 1970-01-01
        • 2011-07-01
        • 2015-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 2018-05-02
        相关资源
        最近更新 更多