文字列は足し算できない
文字列型の数字が二つあります。これを足し算します。まず乱暴ですが文字列同士を足します。
String str1 = "10"; String str2 = "15"; System.out.println(str1 + str2);
実行結果は
1015
となります。文字列同士を+記号で足しても文字列の連結になってしまうのです。10と15を連結したら1015になります。数字として10と15の足し算をして25という答えが欲しい場合はどうすれば良いでしょう?
文字列を数字に変換する
int型の数字を文字にするにはIntegerクラスのtoStringメソッドを呼びます。このメソッドはstaticメソッドといい
Integer.toString(変換したいint型整数)
という形で呼びます。変数の数字を文字列に変換して返してくれます。
int number = 10; String str = Integer.toString(number);
文字列からint型の数字に変換するにはparseIntメソッドを使います。同じくstaticメソッドで以下のように呼び出します。
Integer.parseInt(変換したい文字列)
文字列をint型の数字で返してくれます。
String str = "10"; int number = Integer.parseInt(str); System.out.println(number);
変換に失敗する例
ここで文字列が”10″という数字でできた文字列だからうまくいきました。でも文字列は数字だけとは限りません。例えば”ABC”であったらどうなるでしょうか?
String str = "ABC"; int number = Integer.parseInt(str); System.out.println(number);
実行するとこんなメッセージが出ました。
Exception in thread "main" java.lang.NumberFormatException: For input string: "ABC" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at HelloWorld.main(HelloWorld.java:4)
ここで重要なのは最初の行の
Exception in thread "main" java.lang.NumberFormatException: For input string: "ABC"
というメッセージです。日本語に訳します。
mainという名前のスレッドの実行中に例外が発生しました。数字の書式の例外:”ABC”という文字列を入力として処理したため
ここでは途中のparseIntの処理で中断してしまい最後の出力まで到達できませんでした。
例外に対する対応
発生する可能性がある例外はあらかじめ対処することができます。try-catch節という構文を使って対応します。
String str = "ABC"; try{ int number = Integer.parseInt(str); System.out.println(number); }catch(NumberFormatException e){ System.out.println(e.getMessage()); } System.out.println("finish");
tryの後の{ }の中に例外が発生する処理を書き、その後のcatch後の( )のあとに発生する可能性のある例外の型と変数名を書きます。その後の{ }の中に例外が発生した場合の処理を書きます。例外からメッセージをとる事もできます。
e.getMessage()
実行すると以下のようになります。例外発生時にメッセージを出力し最後のfinishの文字列の出力まで実行されました。
For input string: "ABC" finish