最奇怪的事情。我有这条线
int i = Integer.parseInt("3",3);
但是每次我运行它时,我都会得到一个 NumberFormatException.forInputString。为什么?这是一个简单的基础转换。中断转换的 int 3 有什么特别之处?
parseInt()
需要一个字符串作为第一个参数。
在基数 3 中没有数字“3”。只是“0”到“2”。十进制“3”由以 3 为底的“10”表示。
Integer.parseInt()
期望解析一个字符串,而不是一个整数。你要
int i = Integer.parseInt("3", 3);
您还会遇到 3 不是以三为底的数字的问题。根据文档,这仍然会引发 NumberFormatException。
字符串的任何字符都不是指定基数的数字
3
必须是数字String
才能解析为int
而不是int
文字:
int i = Integer.parseInt("2", 3);
此外,base-3 数字不能包含3
数字,因为只有0
,1
和2
可用。因此我2
在上面的示例代码中使用了。
3 在基数 3 中根本不作为数字存在... 0, 1, 2, 10, 11, 12, 20, 21, 22, 100
如果要将 base-10 解析为 base-n String
,可以使用以下内容:
System.out.println(Integer.toString(3, 2)); // print 11 -> String data type
上面的代码是以 10 (integer) 为基数解析3
为二进制 (base-2) String
。
以下代码应将 base-2 解析String
为 base-10 整数值:
System.out.println(Integer.parseInt("11", 2)); // print 3 -> base-10 integer
上面的代码是将二进制解析11
为以 10 为底的整数。您的代码使用此字符串格式有错误,对于 base-3,字符串仅包含0
, 1
, 2
.
请注意如何使用这两种方法的区别。
Integer.parseInt
将 String 作为有符号十进制整数,并且该整数必须小于且不等于基数值(基数)。
Integer.parseInt("X",x); //X mustn't contain x.