整数.parse(字符串str)java.lang.NumberFormatException:错误
我不断得到数字格式的期望值,即使我正在修剪字符串,而且它们不包含非数字字符。奇怪的是,它适用于某些数字,而不适用于其他数字。下面是我获取数字格式异常的字符串示例。此外,任何以0开头的字符串,例如“020840223”,都返回208405223,不再有零,这应该发生吗整数.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 "
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);