Java中无法将字符串转换为整数

16

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

   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的第二个参数来指定,您正在将字符串解析为十六进制数。 - Jesper
5个回答

14

以下是我偏好的方法:

编辑(08/04/2015):

如下评论所述,实际上最好这样做:

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

除非有改变,Integer.parseInt()是首选的方法,因为它会缓存常用值以提高性能。创建新的整数将总是创建一个新的整数对象。然而,这是在Java 5之前 - 我不会惊讶,如果现在两者都做同样的事情。 - Thomas Owens

9

一个整数无法容纳该值。6042076399(用十进制表示为413424640921)大于2147483647,这是整数可以容纳的最大值。

尝试使用Long.parseLong


1
他正在使用原始类型。我建议在Long之前使用long。我甚至可能会建议在Long之前使用BigInteger,尽管我对此并不完全确定。 - Thomas Owens

4
那是正确的方法,但您的值大于 int 的最大大小。 int 可以容纳的最大大小为 231 - 1,即 2,147,483,647。您的值为 6,042,076,399。如果要使用原始类型,您应该考虑将其存储为 long。长整型的最大值要大得多 - 263 - 1。另一个选择可能是 BigInteger

2

该字符串大于Integer.MAX_VALUE。您无法解析超出整数范围的内容。(我认为它们最高可达到2^31-1)。


1
除了其他人的回答之外,如果您有一个超过8个十六进制数字(但最多16个十六进制数字)的字符串,您可以使用Long.parseLong()将其转换为长整型,而不是使用Integer.parseInt()将其转换为整型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接