Integer.parseInt数字格式异常?

Dan*_*nny 23 java radix

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

System.out.println(Integer.parseInt("howareyou",35))
Run Code Online (Sandbox Code Playgroud)

Ideone

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

Ren*_*ink 31

因为结果将大于Integer.MAX_VALUE

试试这个

System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));
Run Code Online (Sandbox Code Playgroud)

并为

Long.parseLong("abcdefghijklmno",25)
Run Code Online (Sandbox Code Playgroud)

你需要BigInteger

试试这个,你会明白为什么

System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));
Run Code Online (Sandbox Code Playgroud)

  • @Danny,为此你需要,`BigInteger big = new BigInteger("abcdefghijklmno",25); (5认同)

Gle*_*aum 5

来自JavaDocs:

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

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

无论是LongBigInteger应当使用

  • @DavidMays第一个对我来说显然是假的 - 所以引用完整的java文档应该有帮助,如果OP使用消除过程 - 但为了清晰起见现在编辑 (2认同)

Blu*_*lub 5

可能是这个数字> Integer.MAX_VALUE?如果我尝试使用您的代码Long,它可以工作.


Rah*_*thi 5

该数字比Integer.MAX_VALUE更大

试试这个:

System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));
Run Code Online (Sandbox Code Playgroud)

如RenéLink评论所示,您正在寻找使用BigInteger的类似内容:

BigInteger big=new BigInteger("abcdefghijklmno", 25);
Run Code Online (Sandbox Code Playgroud)

像这样的东西:

System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));
Run Code Online (Sandbox Code Playgroud)