Integer.parse(String str)java.lang.NumberFormatException:错误

时间:2015-08-06 04:25:56

标签: java string exception integer numberformatexception

我不断得到数字格式的期望,即使我修剪字符串并且它们不包含非数字字符,奇怪的是它适用于某些数字,而不适用于其他数字。下面是我得到数字格式异常的字符串示例。此外,任何以0开头的字符串,例如" 0208405223",返回208405223,那不再是零,是否应该发生?

String n="3020857508";
Integer a = Integer.parseInt(n.trim());
System.out.println(a);

这是一个例外:

Exception in thread "main" java.lang.NumberFormatException: For input string: "3020857508"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at java.lang.Integer.parseInt(Integer.java:615)
    at JavaBeans.Main.main(Main.java:15)

8 个答案:

答案 0 :(得分:8)

int可解析的最大数字是2147483647(2 31 -1),最大的long9223372036854775807(2 63 -1),只有两倍长。

要解析任意长数,请使用:

import java.math.BigInteger;

BigInteger number = new BigInteger(str);

答案 1 :(得分:7)

这是因为3020857508超过Integer.MAX_VALUE。您应该使用long将字符串转换为数字。

java> String n="3020857508";
//=> java.lang.String n = "3020857508"
java> Integer a = Integer.parseInt(n.trim());
//=> java.lang.NumberFormatException: For input string: "3020857508"
java> Integer.MAX_VALUE
//=> java.lang.Integer res2 = 2147483647
java> Long a = Long.parseLong(n.trim());
//=>java.lang.Long a = 3020857508

以上是javarepl输出。

如果您使用的是JDK9或更高版本,则可以在jshell中看到相同的结果。

jshell> String n="3020857508"
n ==> "3020857508"

jshell> Integer a = Integer.parseInt(n.trim())
|  Exception java.lang.NumberFormatException: For input string: "3020857508"
|        at NumberFormatException.forInputString (NumberFormatException.java:65)
|        at Integer.parseInt (Integer.java:652)
|        at Integer.parseInt (Integer.java:770)
|        at (#2:1)

jshell> Integer.MAX_VALUE
$3 ==> 2147483647

jshell> Long a = Long.parseLong(n.trim());
a ==> 3020857508

答案 2 :(得分:1)

MAX_INT是2147483647,你试图将一个更大的数字解析为整数。

您可以改为使用Long.parseLong

System.out.println(Long.parseLong("3020857508")); // 3020857508

答案 3 :(得分:0)

您尝试解析的数字大于Integer的最大值,您必须使用更大的数据类型,例如Long

public static void main(String[] args) {
    System.out.println("Integer max value: " + Integer.MAX_VALUE);
    System.out.println("Long max value: " + Long.MAX_VALUE);
    System.out.println();

    String n = "3020857508";
    Long a = Long.parseLong(n.trim());
    System.out.println(a);
}

结果:

Integer max value: 2147483647
Long max value: 9223372036854775807

3020857508

答案 4 :(得分:0)

您可以使用

String n="3020857508";
Long a = Long.valueOf(n.trim()).longValue();
System.out.println(a);

答案 5 :(得分:0)

就像@Codebender所说的那样。你的值超出了int的范围。尝试使用long / Long代替。

答案 6 :(得分:0)

    String n="3020857508";
    Long l = Long.parseLong(n.trim());
    System.out.println(l);

整数MAX_VALUE:2147483647, 长期MAX_VALUE:9223372036854775807

由于字符串n在转换后不适合Integer,我们必须使用Long

如果你仍然不确定String中的范围。与BigInteger一起使用int[]

答案 7 :(得分:0)

在Java中,整数范围从-2,147,483,648到2,147,483,647,确保您的数值介于两者之间。