MeWrite Docs

NumberFormatException

文字列を数値に変換できない場合に発生するJavaエラー

概要

NumberFormatException は、文字列を数値型に変換しようとした際に、変換できない形式の場合に発生する実行時例外です。

エラーメッセージ

Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
java.lang.NumberFormatException: For input string: "12.5"
java.lang.NumberFormatException: For input string: ""

原因

1. 数値以外の文字列

1
2
String str = "abc";
int num = Integer.parseInt(str); // NumberFormatException

2. 空文字列

1
2
String str = "";
int num = Integer.parseInt(str); // NumberFormatException

3. 小数を整数にパース

1
2
String str = "12.5";
int num = Integer.parseInt(str); // NumberFormatException

4. 空白を含む文字列

1
2
String str = " 123 ";
int num = Integer.parseInt(str); // NumberFormatException

解決策

1. 事前に検証する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public static boolean isNumeric(String str) {
    if (str == null || str.isEmpty()) {
        return false;
    }
    try {
        Integer.parseInt(str);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

// 使用例
String input = "123";
if (isNumeric(input)) {
    int num = Integer.parseInt(input);
}

2. try-catchで処理

1
2
3
4
5
6
7
String input = getUserInput();
try {
    int num = Integer.parseInt(input);
    System.out.println("数値: " + num);
} catch (NumberFormatException e) {
    System.out.println("有効な数値を入力してください");
}

3. trimで空白を除去

1
2
String str = " 123 ";
int num = Integer.parseInt(str.trim()); // OK: 123

4. 小数はDoubleを使用

1
2
String str = "12.5";
double num = Double.parseDouble(str); // OK: 12.5

5. Optionalを使用(Java 8+)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public static Optional<Integer> parseIntSafe(String str) {
    try {
        return Optional.of(Integer.parseInt(str.trim()));
    } catch (NumberFormatException | NullPointerException e) {
        return Optional.empty();
    }
}

// 使用例
parseIntSafe("123").ifPresent(num -> System.out.println(num));

関連エラー

関連エラー

Java の他のエラー

最終更新: 2025-12-17