如何在java中将16位以上的字符串转换为整数?

时间:2013-12-02 04:50:51

标签: java int numberformatexception

我是java的初学者。请帮助我,

int i = Integer.parseInt("9876543210123456");
System.out.println("Integer: " + i);

我得到了以下错误,

java.lang.NumberFormatException for input string : "9876543210123456"

7 个答案:

答案 0 :(得分:3)

它越过整数限制,你需要BigInteger

BigInteger b = new BigInteger("9876543210123456");

答案 1 :(得分:2)

您无法将上述值转换​​为int,因为它超过了Integer的最大值:2,147,483,647。

而是尝试:

Long.parseLong("9876543210123456");

Long的最大值为9,223,372,036,854,775,807。

要检查这些和其他原始数据类型的最大值,请尝试:

Integer.MAX_VALUE;
Long.MAX_VALUE;
// etc for Float, Double...
// Also try MIN_VALUE

答案 2 :(得分:2)

在Java中,原始int数据类型是32位带符号的二进制补码整数 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

你可以使用Long:

long i = Long.parseLong("9876543210123456");
System.out.println("Long: " + i);

请参阅此处的API - http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html

或者你也可以使用BigInteger:

BigInteger i = new BigInteger("9876543210123456");
System.out.println("BigInteger: " + i);

请参阅此处的API - http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

BigInteger类似于原始整数类型,除了它提供任意精度,因此BigIntegers上的操作不会溢出或丢失精度。除标准算术运算外,BigInteger还提供模运算,GCD计算,素数测试,素数生成,位操作以及一些其他杂项操作。

如果您对使用原语或对象引用感到困惑,这是一个很好的讨论

When to use primitive and when reference types in Java

答案 3 :(得分:0)

在java的int范围内,从-2,147,483,648到2,147,483,647。所以尝试长而不是int。

答案 4 :(得分:0)

NumberFormat nf = NumberFormat.getInstance();

您还可以使用NumberFormat来解析数字:

 myNumber = nf.parse("9876543210123456");

见下文

http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html

答案 5 :(得分:0)

虽然BigInteger可能会有效,但最好的方法是仅保留String并将其显示为String。这是处理长数字数字的理想方式,您最终不会遇到任何类型的异常。

答案 6 :(得分:-1)

long x = Long.parseLong("9876543210123456");

System.out.println("Integer: " + x);

或者使用后续行

BigInteger bint = new BigInteger("9999999999999999", 16);

请尝试这个..无法将超过13位的字符串转换为int..so,你应该转换为long