Integer.parseInt数字格式异常?

时间:2013-11-26 14:32:29

标签: java radix

我觉得我必须遗漏一些简单的东西,但我在以下代码中得到NumberFormatException

System.out.println(Integer.parseInt("howareyou",35))

Ideone

它可以从基数35转换字符串yellow,我不明白为什么我会在这个字符串上得到NumberFormatException

7 个答案:

答案 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,该值太大。
  •   

应使用LongBigInteger

答案 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)