🍽️
parseXXX() の第二引数で、基数を指定できる件
タイトルの通り。この事実を知らず、今日もまた無駄なコードを書いてしまったので、反省がてら記録として残しておく。
parseXXX() in Java
Javaでは、数字になり得る文字列を、parseXXX()
というメソッドで様々な数字系の型に変換できる。シンタックスは以下のようになる。
static int parseInt(String s)
static double parseDouble(String s)
static long parseLong(String s)
int x = Integer.parseInt("10"); // 10
double y = Double.parseDouble("100"); // 100.0
long z = Long.parseLong("0"); // 0L
2nd argument in parseXXX()
今回私が初めて知ったのは、これらが第二引数を取り、そこではRadix(基数/base number)[1]が使えるということだ。
static int parseInt(String s, int radix)
static double parseDouble(String s, int radix)
static long parseLong(String s, int radix)
基数はX進数のX。2を指定すれば二進数だし、16を指定すれば16進数として、第一引数の文字列を変換してくれる。
実際のコードではこんな感じになる。第一引数の文字列が、第二引数の基数で変換できない場合はNumberFormatException
が投げられる。
long a = Long.parseLong("0", 10); // 0L
long b = Long.parseLong("-FF", 16); // -255L
long c = Long.parseLong("11001010", 2); // 202L
try {
long d = Long.parseLong("99", 8); // NumberFormatException
} catch(NumberFormatException ex){
ex.printStackTrace();
}
ちなみにこの第二引数を指定しないデフォルトの状態では、10(つまり、10進数)が指定されていることになる。
radix
radix(基数)は、他のメソッドでも度々登場する。
.toString()
public static String toString (int i, int radix)
第一引数に文字列、第二引数に基数を取る。文字列を基数ベースで変換し、String
として返す。
// return a string representation of the 1st argument
// in the radix given by the 2nd arguments.
String intStrInBinary = Integer.toString(12345, 2); // "11000000111001"
.valueOf()
public static String valueOf (String s, int radix)
第一引数にString
型の文字列、第二引数に基数を取る。文字列を、基数ベースで解釈した結果を、Integer
型のインスタンスとして返す。
ドキュメントにもあるが、中で何が行われているかと言えば、
new Integer(Integer.parseInt(s, radix))
というインスタンスを作って返しているとのこと。
// return an Integer object parsed with the radix given as the 2nd argument
Integer strInInt2 = Integer.valueOf("10010",2); // 18
Integer strInInt8 = Integer.valueOf("12345",8); // 5349
Integer strInInt10 = Integer.valueOf("12345", 10); // 12345
Integer strInInt16 = Integer.valueOf("12345", 16); // 74565
-
radixはラテン語でrootという意味。radix : Java Glossary ↩︎
Discussion
第2引数はregex(正規表現)ではなく、radix(基数)ですね。
ご指摘いただき見直してみたら、確かにradixでしたね。記事も修正します。ありがとうございました。