Integer.parseInt(字符串 str)java.lang.NumberFormatException:错误

Integer.parseInt(String str) java.lang.NumberFormatException: Errors

尽管我正在修剪字符串并且它们不包含非数字字符,但我总是收到数字格式期望,奇怪的是它适用于某些数字而不适用于其他数字。下面是我得到数字格式异常的字符串示例。此外,任何以 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)

MAX_INT 是 2147483647,您正在尝试将更大的数字解析为整数。

您可以使用 Long.parseLong 代替:

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

因为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
 ==> 2147483647

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

您尝试解析的数字大于 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

你可以使用

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

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

可解析为 int 的最大数字是 2147483647 (231-1),最大的 long9223372036854775807(263-1),只有原来的两倍长。

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

import java.math.BigInteger;

BigInteger number = new BigInteger(str);
    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[]

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