Java で 数字の文字列を int
型に変換する際には、Integer.valueOf
を利用するのが一般的です。
例えば以下のような感じ。
public class ToInteger { public static void main(String[] args) { System.out.println(Integer.valueOf("1")); System.out.println(Integer.valueOf("2")); System.out.println(Integer.valueOf("3")); System.out.println(Integer.valueOf("4")); System.out.println(Integer.valueOf("5")); } }
出力結果
1 2 3 4 5
なんの変哲もない結果です。
では、これをString
型ではなくchar
型でやってみましょう。
public class ToInteger { public static void main(String[] args) { System.out.println(Integer.valueOf('1')); System.out.println(Integer.valueOf('2')); System.out.println(Integer.valueOf('3')); System.out.println(Integer.valueOf('4')); System.out.println(Integer.valueOf('5')); } }
出力結果
49 50 51 52 53
ほとんどの人が望んでいない結果が出力されています。
最初のString
型でのInteger.valueOf
は Integer.valueOf(String s)
が呼び出されていますが、
後者のchar
型の場合は、Integer.valueOf(int i)
が呼び出されています。
というわけでchar
型の場合 int
型にキャストされて Integer.valueOf
が呼び出されているのと同様です。
各 char
型の値を int
型 にキャストした値を出力してみると
public class ToInteger { public static void main(String[] args) { System.out.println((int) '1'); System.out.println((int) '2'); System.out.println((int) '3'); System.out.println((int) '4'); System.out.println((int) '5'); } }
出力結果
49 50 51 52 53
さきほどと同様の結果が出力されます。これはASCIIコードになっている状態です。
では、数字を意味するchar
型をそのままの見た目の数値に変換したい場合、どうすればいいかというと
Character.getNumericValue
というメソッドが用意されているので、これを使いましょう。
public class ToInteger { public static void main(String[] args) { System.out.println(Character.getNumericValue('1')); System.out.println(Character.getNumericValue('2')); System.out.println(Character.getNumericValue('3')); System.out.println(Character.getNumericValue('4')); System.out.println(Character.getNumericValue('5')); } }
出力結果
1 2 3 4 5
望んだ結果となりました。
まとめ
Java で char
型を利用するケースが必ずしも多くないため、こんな挙動について知らなくてもいいかもしれないですが、
はまると一瞬混乱を招くので、一応Character.getNumericValue
などの存在も知っておいても損は無いかもしれません。