2013-11-26 129 views
21

我觉得我必须缺少简单的东西,但我在下面的代码得到一个NumberFormatExceptionInteger.parseInt数字格式异常?

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

Ideone

可以从底部35字符串yellow转换,我不不知道为什么我会在这个String上得到一个NumberFormatException

+0

从文档:“将字符串参数为在所述第二参数指定的基数中的一个符号整数字符串中的字符必须是指定基数的数字(如通过是否Character.digit将(确定。 char,int)返回一个非负值),除了第一个字符可能是ASCII减号' - '('\ u002D')来表示负值或ASCII加号'+'('\ u002B')以“ – HectorLector

+2

生成的数字对于一个java Integer来说太大了,使用了一个Long ... –

回答

29

因为结果会得到大于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)); 
+0

这似乎是正确的。但是,我碰到了一个新的问题:Long.parseLong(“abcdefghijklmno”,25)'。任何关于如何解析更大数字的想法都不是parseBigDecimal? – Danny

+5

@Danny,为了您的需要,BigInteger big = new BigInteger(“abcdefghijklmno”,25);' – Masudul

5

从JavaDoc中:

  • 第一个参数是null或是零长度的字符串:

    如果发生以下任一情况NumberFormatException类型的则抛出异常。 FALSE:“howareyou”不是null且长度超过0

  • 该基数小于Character.MIN_RADIX或大于Character.MAX_RADIXFALSE:35在范围内[2,36]
  • 字符串的任何字符不是指定基数的数字,除了第一个字符可能是减号' - '('\ u002D')或加号 '+'( '\ u002B')提供的字符串比长度长1 FALSE:的所有字符 “howareyou” 是在基数范围[0, 'Y']
  • ==>该字符串表示的值不是int类型的值。 真:异常的原因。该值对于int来说太大。

要么LongBigInteger应使用

+1

这并没有真正回答这个问题,你只需要转储4个选项而不清楚哪个一个是原因(以及为什么)。 –

+0

霰弹枪的方法在这里仍然是错误的。有唯一一个正确的答案。仅仅因为你将它与其他3个完全错误的其他人加在一起并不能使你的答案正确。 – dm78

+2

@DavidMays第一个对我来说显然是错误的 - 所以如果OP使用了淘汰的过程,那么引用完整的java文档应该会有所帮助 - 但为了清晰起见现在编辑 –

5

莫非该号码>Integer.MAX_VALUE?如果我用Long来代码尝试你的代码,它就可以工作。

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

越来越大于Integer.MAX_VALUE

数量试试这个:

System.out.println(Integer.parseInt("yellow", 35)); 
System.out.println(Long.parseLong("howareyou", 35)); 

正如勒链接看到评论您正在寻找这样的事情使用BigInteger

BigInteger big=new BigInteger("abcdefghijklmno", 25); 

事情是这样的:

System.out.println(Long.MAX_VALUE); 
System.out.println(new BigInteger("abcdefghijklmno",25)); 
2

产生的数量太大了Java的整数,使用期长。

2

以前parseLong的答案是正确的,但有时候这还不够大,所以其他选项会使用BigInteger。

Long.parseLong("howareyou", 35) 
new BigInteger("howareyou", 35)