神秘的java.lang.NumberFormatException

时间:2016-05-12 19:34:37

标签: java

我得到以下例外:

java.lang.NumberFormatException: For input string: "3693019260"

打电话

Integer.parseInt(s);

而且我不知道为什么会得到它。

  • 3693019260小于2 ^ 32
  • 3693019260显然是一个自然数
  • 使用s.replaceAll("[^0-9]", "")
  • 清除所有非数字元素的字符串

那为什么我会得到这个例外?

根据我所做的一些调试,我看到数字在multmin下沾,但我不知道这个变量做了什么以及我应该如何解释这个观察结果。

1 个答案:

答案 0 :(得分:5)

虽然int可能适合32位无符号整数,但看起来您正试图将其解析为有符号整数-。签名只是意味着它使用2147483647支持负值。

对于带符号的数字,名称空间的一半是保留的,因此您的号码必须符合2 ^ 32÷2-1 long,而不仅仅是2 ^ 32。

最简单的解决方法是将值解析为int而不是{{1}}。长数字是64位,并支持字符串中的更多数字。