3秒でわかる
Java で文字列を int に変換する静的メソッド。入力欄や CSV から届く値は必ず文字列なので、計算に使う前にこれで数値へ直します。
もう少し詳しく
どういうものか
Integer.parseInt は、"42" のような文字列を 42 という int 型の数値に変換する Java の静的メソッドです。Integer クラスに属しているので、インスタンスを作らずクラス名から直接呼び出します。逆向きの変換、つまり数値を文字列に戻すときは String.valueOf を使います。
なぜ必要か
キーボード入力、Web フォーム、CSV ファイル、コマンドライン引数。プログラムの外から入ってくる値は、見た目が数字でも中身はすべて文字列です。Java は型に厳格なので、文字列のままでは足し算も大小比較もできません。
"10" + "5" は 15 ではなく "105" になります。文字列どうしの + は連結だからです。数として扱いたい瞬間に変換する、その境目を作るのが parseInt の役割です。
具体例
import java.util.Scanner;
public class Age {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("年齢を入力してください ");
String input = sc.nextLine().trim();
try {
int age = Integer.parseInt(input);
System.out.println("10年後は " + (age + 10) + " 歳です");
} catch (NumberFormatException e) {
System.out.println("数字だけを入力してください");
}
// 基数を指定すると 2 進数や 16 進数も読める
int bin = Integer.parseInt("1011", 2); // 11
int hex = Integer.parseInt("ff", 16); // 255
System.out.println(bin + " / " + hex);
}
}つまずきやすいところ
変換できない文字列を渡すと NumberFormatException が飛びます。実際に落ちるのは、空文字、null、前後に空白が付いた " 42 "、小数点入りの "3.14"、桁区切りの "1,000"、全角の "42"、そして int の上限を超える "3000000000" です。前後の空白は trim で落とせますが、小数を int にしたいなら Double.parseDouble を通してから丸めます。
例外を握りつぶして 0 を返す実装もよく見かけますが、入力ミスと本当の 0 が区別できなくなります。既定値を返すなら、その値が「変換できなかった印」だと呼び出し側にわかる形にしておきます。
似た用語との違い
| 書き方 | 戻り値 | 使いどころ |
|---|---|---|
Integer.parseInt("42") | int | 計算にそのまま使う |
Integer.valueOf("42") | Integer | List などジェネリクスに入れる |
Double.parseDouble("3.14") | double | 小数を扱う |
JavaScript の parseInt("12abc") は先頭だけ読んで 12 を返しますが、Java は例外を投げます。他言語の感覚のまま書くと挙動が違って驚く箇所です。
覚え方
parse は「解析して取り出す」。文字の並びを解析して int を取り出すから parseInt です。