web-dev-qa-db-ja.com

Integer.parseInt数値形式の例外?

私は何か簡単なものを見逃しているように感じますが、次のコードでNumberFormatExceptionを取得しています:

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

イデオン

文字列yellowをベース35から変換できます。この文字列でNumberFormatExceptionを取得する理由がわかりません。

23
Danny

結果が 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));
30
René Link

JavaDocsから:

次のいずれかの状況が発生すると、タイプNumberFormatExceptionの例外がスローされます。

  • 最初の引数はnullであるか、長さがゼロの文字列です。 FALSE: "howareyou"はnullではなく、長さが0を超えています
  • 基数は、Character.MIN_RADIXより小さいか、Character.MAX_RADIXより大きいです。 FALSE:35は[2,36]の範囲内
  • 文字列の任意の文字は、指定された基数の数字ではありません。ただし、文字列が長さ1より長いFALSE:「howareyou」のすべての文字は基数範囲[0、 'y']
  • ==>文字列で表される値は、int型の値ではありません。 TRUE:例外の理由。値はintには大きすぎます。

LongまたはBigIntegerのいずれかを使用する必要があります

5

番号が> Integer.MAX_VALUE?代わりにLongを使用してコードを試すと、機能します。

5
Blub

数は 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));
5
Rahul Tripathi

ParseLongのこれまでの答えは正しいでしょうが、時にはそれも十分に大きくないので、他のオプションはBigIntegerを使用します。

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

ご覧のとおり、Integerのスペースが不足しています。 Longと交換することで、目的の結果が得られます。 こちらが作業コードへのIDEOneリンクです

コード

System.out.println(Integer.parseInt("YELLOW",35));
System.out.println(Long.parseLong("HOWAREYOU",35));
2
christopher

生成される数値は、Java整数、長整数型を使用するには大きすぎます。

2
Bob Flannigon