疲れたらやすむ

Javaを学ぶ上でハマったところを書いていきます。iPhoneアプリ開発や日常ネタもあるかも。

【Java】String型からint型に変換可能かどうか

今回は型変換のお話です。
と言っても今回のテーマはString型からint型への変換のみに的を絞ります。

型変換はそこら中のソースで頻繁に行われていると思います。
とくにString型とint型の変換は使用頻度も高いはず。

ほかにも良い判定方法はあるかもしれませんが以下で実装可能です。

ソース

String str = "123";	// int型に変換可能か調べる値

try {
	Integer.parseInt(str);
	System.out.println("int型に変換可能です。");
} catch (NumberFormatException e) {
	System.out.println("int型へは変換できません。");
}

例外を利用してint型へ変換可能かを判定。
変換にはIntegerクラスのparseIntメソッドを使用します。

そして起こりうる例外はNumberFormatExceptionです。
その数値型にするには文字列がおかしいよ~っていう例外。
parseIntメソッドはint型に変換するものなのでint型の範囲の数値でなければなりません。
「-2147483648~2147483647」の範囲内の整数である必要があります。
つまり、「12.3」などの小数点入りの文字列もダメ。

今回のポイントは変換が可能であるかどうかを判定することです。
例外が発生しなければtryの処理はすべて行われ、catchへ処理が移ることはありません。
例外が発生するとそのタイミングでtryの処理を抜け、捕捉したcatchの処理へ移ります。
ということは、「int型に変換可能です。」が出力されればstrはint型に変換可能ということです。

これだけのことなのですが、当時は結構悩みました。
parseIntメソッドの存在は知っていましたし変換が出来ることも知っていました。
ですが頭が固いばかりに

if(Integer.parseInt(str) >= -2147483648)

っていうようなint型である条件をいくつか合わせてtrueならばint型だ!っていうのを想像していました。
よく考えたら、いやいやparseIntして例外出ない時点で思いっきりint型だよね。みたいな。


私がJavaを学ぶ上で例外処理はかなり苦手意識が強かったです。
難しいというか、意味がわからないっていう言葉がしっくりきますかね。
とにかく謎でした。
今も使いこなせていないと思います。

catchの処理なんて捕捉した例外を出力するためだけのものだと思っていました。
printStackTraseメソッドですね。
でも実際にはcatchの中でも通常通り様々な処理を行うことができます。

今回は例外を利用して判定を行いました。
話が例外へと変わってきつつありますが以上になります。