神秘的java.lang.NumberFormatException

神秘的java.lang.NumberFormatException,java,Java,我得到以下例外: java.lang.NumberFormatException: For input string: "3693019260" 打电话的时候 Integer.parseInt(s); 我不知道为什么我会得到它 3693019260小于2^32 3693019260显然是一个自然数 使用s.replaceAll(“[^0-9]”,“) 那么为什么我会得到这个例外呢 根据我所做的一点调试,我看到数字在multmin下下降,但我不知道这个变量的作用以及我应该如何解释这个观察值

我得到以下例外:

java.lang.NumberFormatException: For input string: "3693019260"
打电话的时候

Integer.parseInt(s);
我不知道为什么我会得到它

  • 3693019260小于2^32
  • 3693019260显然是一个自然数
  • 使用
    s.replaceAll(“[^0-9]”,“)
那么为什么我会得到这个例外呢


根据我所做的一点调试,我看到数字在
multmin
下下降,但我不知道这个变量的作用以及我应该如何解释这个观察值。

3693019260
可能适合32位无符号整数,看起来您正试图将其解析为一个普通的
int
,它是一个有符号整数。有符号表示它支持使用
-
的负值

对于有符号的数字,名称空间的一半是保留的,因此您的数字必须适合2^32÷2−1
2147483647
而不仅仅是2^32


最简单的修复方法是将值解析为
long
,而不是
int
。长数字是64位的,支持字符串中更多的数字。

您需要描述如何解析字符串,最好是使用代码。@pvg done,完全忘记了xDYes,包括原始代码通常是必需的,但我设法推断出他使用的是
Integer.parseInt
或它的一个朋友。答案已经涵盖了您。只需使用一个长整数,而不是一个整数。可能需要添加签名的整数到
2147483647
aka
2^31-1
好的,我太傻了,谢谢xD@Kiskae他写了2^32/2-1,这是同一件事。