24

我觉得我一定错过了一些简单的东西,但我得到了NumberFormatException以下代码:

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

爱迪生

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

4

7 回答 7

33

因为结果会大于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));
于 2013-11-26T14:38:26.767 回答
5

来自 JavaDocs:

NumberFormatException如果发生以下任何一种情况,则会引发类型异常:

  • 第一个参数是null或长度为零的字符串。FALSE:“howareyou”不是null并且超过 0 长度
  • 基数小于Character.MIN_RADIX或大于Character.MAX_RADIXFALSE:35 在 [2,36] 范围内
  • 字符串的任何字符都不是指定基数的数字,除非第一个字符可以是减号'-'('\u002D')或加号'+'('\u002B'),前提是字符串是长于长度 1. FALSE: "howareyou" 的所有字符都在基数范围 [0,'y']
  • ==>字符串表示的值不是 type 的值intTRUE:异常的原因。该值对于int.

要么 要么Long应该BigInteger使用

于 2013-11-26T14:35:28.713 回答
5

可能是数字是 >Integer.MAX_VALUE吗?如果我尝试使用您的代码Long,它会起作用。

于 2013-11-26T14:37:58.530 回答
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));
于 2013-11-26T14:38:51.940 回答
2

如您所见,您的Integer. 通过将其换成 a Long,您将获得所需的结果。这是工作代码的 IDEOne 链接

代码

System.out.println(Integer.parseInt("YELLOW",35));
System.out.println(Long.parseLong("HOWAREYOU",35));
于 2013-11-26T14:38:39.567 回答
2

生成的数字对于 Java Integer 来说太大了,请使用 Long。

于 2013-11-26T14:39:30.690 回答
2

parseLong 的先前答案是正确的,但有时也不够大,因此另一个选项将使用 BigInteger。

Long.parseLong("howareyou", 35)
new BigInteger("howareyou", 35)
于 2013-11-26T14:45:36.317 回答