我觉得我必须遗漏一些简单的东西,但我在以下代码中得到NumberFormatException
:
System.out.println(Integer.parseInt("howareyou",35))
它可以从基数35转换字符串yellow
,我不明白为什么我会在这个字符串上得到NumberFormatException
。
答案 0 :(得分:30)
因为结果会超过Integer.MAX_VALUE
试试这个
System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));
和
Long.parseLong("abcdefghijklmno",25)
您需要BigInteger
试试这个,你会明白为什么
System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));
答案 1 :(得分:5)
来自JavaDocs:
如果出现以下任何一种情况,则抛出类型
NumberFormatException
的异常:
- 第一个参数是
null
或者是一个长度为零的字符串。 FALSE:“howareyou”不是null
且超过0长- 基数小于
Character.MIN_RADIX
或大于Character.MAX_RADIX
。 FALSE:35在范围[2,36]- 字符串的任何字符都不是指定基数的数字,除了第一个字符可能是减号' - '('\ u002D')或加号'+'('\ u002B'),前提是字符串长度超过长度1. FALSE:“howareyou”的所有字符都在基数范围[0,'y']
- ==> 字符串表示的值不是类型
int
的值。 TRUE:异常的原因。对于int
,该值太大。
应使用Long
或BigInteger
答案 2 :(得分:5)
可能是这个数字是> Integer.MAX_VALUE
?如果我使用Long
代替您的代码,则可以使用。
答案 3 :(得分:5)
这个数字比Integer.MAX_VALUE
更大试试这个:
System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));
如RenéLink评论所示,您正在使用BigInteger
寻找类似的内容BigInteger big=new BigInteger("abcdefghijklmno", 25);
这样的事情:
System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));
答案 4 :(得分:2)
正如您所看到的,Integer
中的空间不足。通过将其换成Long
,您可以获得所需的结果。 Here is the IDEOne Link to the working code
代码
System.out.println(Integer.parseInt("YELLOW",35));
System.out.println(Long.parseLong("HOWAREYOU",35));
答案 5 :(得分:2)
对于Java Integer,产生的数字太大,请使用Long。
答案 6 :(得分:2)
先前的parseLong答案是正确的,但有时候也不够大,所以另一个选项会使用BigInteger。
Long.parseLong("howareyou", 35)
new BigInteger("howareyou", 35)