【发布时间】:2012-11-25 02:09:29
【问题描述】:
所以,我使用 BigInteger 将一些二进制字符串转换为数字表示,结果卡在了一个奇怪的错误上。
当这行代码运行时,它会引发 NumberFormatException:
BigInteger temp = new BigInteger(strbuf.toString(), 2);
其中 strbuf 具有以下字符串(仅由零和一组成):
"1001110000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010"
起初我以为字符串或值可能太大了,但以下独立的 java 类编译并运行得很好:
import java.math.BigInteger;
class test {
public static void main(String[] argv) {
StringBuffer strbuf = new StringBuffer("1001110000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010");
BigInteger big = new BigInteger(strbuf.toString(), 2);
System.out.println(big);
}
}
这里有什么我遗漏的吗?为什么具有明显相同值的相同代码无法在我的主应用程序上运行?
异常信息:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1001110000000100"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.math.BigInteger.<init>(Unknown Source)
at org.app.star.pad(star.pad:42)
【问题讨论】:
-
输入中有不可见的空格?
-
然在IdeOne代码(ideone.com/GuJLLC),并得到了下面的输出(所以我用@JanDvorak - 必须有一些我们看不到的,像空格):417930212607612468737110316986879612439672931440615354309603422963982626776659655589632258299793872789220031604756569181620845534282724833020726590169395583661276012623515415583708710670108499420513173862492847862152600326386627711243234204303044817195286706366016107594099186988482244150662103889346562 SPAN>
-
更准确地说,我猜
0100后面有一个换行符。请注意,输入在此位置被截断。 -
可能你的数字有误。我和其他人一样没有错误。
-
为了进一步澄清,在帖子中复制的原始字符串来自一种仅从 0 和 1 创建字符串的方法。在该 sn-p 中运行的方法(及其在此处工作)也)从屏幕上显示的内容复制(使用剪贴板)。正如 Jan Dvorak 建议的那样,我将使用正则表达式检查原始字符串中的任何控制字符。
标签: java string biginteger numberformatexception