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