我不断得到数字格式的期望,即使我修剪字符串并且它们不包含非数字字符,奇怪的是它适用于某些数字,而不适用于其他数字。下面是我得到数字格式异常的字符串示例。此外,任何以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)
答案 0 :(得分:8)
int
可解析的最大数字是2147483647
(2 31 -1),最大的long
是9223372036854775807
(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,确保您的数值介于两者之间。