整数.parse(字符串str)java.lang.NumberFormatException:错误

整数.parse(字符串str)java.lang.NumberFormatException:错误,java,string,exception,integer,numberformatexception,Java,String,Exception,Integer,Numberformatexception,我不断得到数字格式的期望值,即使我正在修剪字符串,而且它们不包含非数字字符。奇怪的是,它适用于某些数字,而不适用于其他数字。下面是我获取数字格式异常的字符串示例。此外,任何以0开头的字符串,例如“020840223”,都返回208405223,不再有零,这应该发生吗 String n="3020857508"; Integer a = Integer.parseInt(n.trim()); System.out.println(a); 这是一个例外: Exception in thread "

我不断得到数字格式的期望值,即使我正在修剪字符串,而且它们不包含非数字字符。奇怪的是,它适用于某些数字,而不适用于其他数字。下面是我获取数字格式异常的字符串示例。此外,任何以0开头的字符串,例如“020840223”,都返回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\u值。您应该使用
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
以上是输出

如果您使用的是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

您试图解析的数字大于
整数的最大值,您必须使用更大的数据类型,如
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),最大的
9223372036854775807
(263-1),只有大约两倍长

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

import java.math.BigInteger;

BigInteger number = new BigInteger(str);
整数最大值:2147483647, 长最大值:9223372036854775807

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


若你们仍然不确定字符串的范围。使用
biginger
在Java中,数字保存在
int[]

中,整数范围是从-2147483648到2147483647。请确保您的数值在相同值之间。

因为该数字超出了
int
的范围。应删除零;int只有一个值,而不是格式的概念,任何前导零都是与值无关的格式。如果需要将前导零输出到指定的宽度,则需要使用适当的格式代码将其转换回字符串,例如,
%010d“
,以便在需要显示的值少于10个字符的情况下,使输出宽度为10个字符并加上零填充。是的,谢谢,我现在意识到我的错误。
    String n="3020857508";
    Long l = Long.parseLong(n.trim());
    System.out.println(l);