我觉得我必须缺少简单的东西,但我在下面的代码得到一个NumberFormatException
:Integer.parseInt数字格式异常?
System.out.println(Integer.parseInt("howareyou",35))
可以从底部35字符串yellow
转换,我不不知道为什么我会在这个String上得到一个NumberFormatException
。
我觉得我必须缺少简单的东西,但我在下面的代码得到一个NumberFormatException
:Integer.parseInt数字格式异常?
System.out.println(Integer.parseInt("howareyou",35))
可以从底部35字符串yellow
转换,我不不知道为什么我会在这个String上得到一个NumberFormatException
。
因为结果会得到大于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));
从JavaDoc中:
null
或是零长度的字符串:
如果发生以下任一情况
NumberFormatException
类型的则抛出异常。 FALSE:“howareyou”不是null
且长度超过0
Character.MIN_RADIX
或大于Character.MAX_RADIX
。 FALSE:35在范围内[2,36]int
类型的值。 真:异常的原因。该值对于int
来说太大。要么Long
或BigInteger
应使用
这并没有真正回答这个问题,你只需要转储4个选项而不清楚哪个一个是原因(以及为什么)。 –
霰弹枪的方法在这里仍然是错误的。有唯一一个正确的答案。仅仅因为你将它与其他3个完全错误的其他人加在一起并不能使你的答案正确。 – dm78
@DavidMays第一个对我来说显然是错误的 - 所以如果OP使用了淘汰的过程,那么引用完整的java文档应该会有所帮助 - 但为了清晰起见现在编辑 –
莫非该号码>Integer.MAX_VALUE
?如果我用Long
来代码尝试你的代码,它就可以工作。
正如您所看到的,您的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));
越来越大于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));
产生的数量太大了Java的整数,使用期长。
以前parseLong的答案是正确的,但有时候这还不够大,所以其他选项会使用BigInteger。
Long.parseLong("howareyou", 35)
new BigInteger("howareyou", 35)
从文档:“将字符串参数为在所述第二参数指定的基数中的一个符号整数字符串中的字符必须是指定基数的数字(如通过是否Character.digit将(确定。 char,int)返回一个非负值),除了第一个字符可能是ASCII减号' - '('\ u002D')来表示负值或ASCII加号'+'('\ u002B')以“ – HectorLector
生成的数字对于一个java Integer来说太大了,使用了一个Long ... –