我觉得我一定错过了一些简单的东西,但我得到了NumberFormatException
以下代码:
System.out.println(Integer.parseInt("howareyou",35))
它可以yellow
从基数 35 转换字符串,我不明白为什么我会NumberFormatException
在这个字符串上得到一个。
因为结果会大于Integer.MAX_VALUE
试试这个
System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));
并且对于
Long.parseLong("abcdefghijklmno",25)
你需要大整数
试试这个,你会明白为什么
System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));
来自 JavaDocs:
NumberFormatException
如果发生以下任何一种情况,则会引发类型异常:
- 第一个参数是
null
或长度为零的字符串。FALSE:“howareyou”不是null
并且超过 0 长度- 基数小于
Character.MIN_RADIX
或大于Character.MAX_RADIX
。FALSE:35 在 [2,36] 范围内- 字符串的任何字符都不是指定基数的数字,除非第一个字符可以是减号'-'('\u002D')或加号'+'('\u002B'),前提是字符串是长于长度 1. FALSE: "howareyou" 的所有字符都在基数范围 [0,'y']
- ==>字符串表示的值不是 type 的值
int
。TRUE:异常的原因。该值对于int
.
要么 要么Long
应该BigInteger
使用
可能是数字是 >Integer.MAX_VALUE
吗?如果我尝试使用您的代码Long
,它会起作用。
数字变得大于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));
如您所见,您的Integer
. 通过将其换成 a Long
,您将获得所需的结果。这是工作代码的 IDEOne 链接。
代码
System.out.println(Integer.parseInt("YELLOW",35));
System.out.println(Long.parseLong("HOWAREYOU",35));
生成的数字对于 Java Integer 来说太大了,请使用 Long。
parseLong 的先前答案是正确的,但有时也不够大,因此另一个选项将使用 BigInteger。
Long.parseLong("howareyou", 35)
new BigInteger("howareyou", 35)