私は何か簡単なものを見逃しているように感じますが、次のコードで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)
あなたが必要とする BigInteger
これを試してみると、理由がわかります
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]の範囲内- 文字列の任意の文字は、指定された基数の数字ではありません。ただし、文字列が長さ1より長いFALSE:「howareyou」のすべての文字は基数範囲[0、 'y']
- ==>文字列で表される値は、
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));
ParseLongのこれまでの答えは正しいでしょうが、時にはそれも十分に大きくないので、他のオプションはBigIntegerを使用します。
Long.parseLong("howareyou", 35)
new BigInteger("howareyou", 35)
ご覧のとおり、Integer
のスペースが不足しています。 Long
と交換することで、目的の結果が得られます。 こちらが作業コードへのIDEOneリンクです 。
コード
System.out.println(Integer.parseInt("YELLOW",35));
System.out.println(Long.parseLong("HOWAREYOU",35));
生成される数値は、Java整数、長整数型を使用するには大きすぎます。