【Java初心者向け】NumberFormatExceptionとは?原因・解消方法

【Java初心者向け】NumberFormatExceptionとは?原因・解消方法

本サイトでは、無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の講師が、未経験者に向けてプログラミングの基礎を解説する記事を公開しています。

今回の記事テーマは「NumberFormatException」についての解説です。

NumberFormatExceptionとは

NumberFormatExceptionとは、文字列を数値型に変換する際、文字列の形式が正しくない場合にスローされる例外です。

例外について詳しくは以下の記事にて解説しています。

関連記事

プログラミングを始めたばかりの方にとって、「例外」という言葉は少し難しく感じるかもしれません。 しかし、例外はプログラムの動作を正しく理解し、扱うために欠かせない重要な概念です。 簡単に言えば、例外とは、プログラムが予期しない事態に[…]

「文字列の形式が正しくない」とは、下記のような場合です。

  • 文字列がnull
  • 「20歳」「100点」のように数値型に変換できない文字が含まれている
  • int型に小数点を含む値を代入しようとしている等、データ型の値の範囲を超えている

変数の型について詳しくは以下の記事をご参照ください。

関連記事

この記事では、テックドリームの講師がプログラミングについて、未経験の方にも分かりやすくご紹介いたします! 今回はJavaにおいての「変数」とは何か、書き方など具体例を踏まえながら解説します。 変数とは 変数とは、文字や数値を保管で[…]

NumberFormatExceptionが発生する例と解消方法

文字列がnullの場合

変換しようとする文字列がnullの場合は、NumberFormatExceptionが発生します。

この場合は文字列の変数に値を代入することで解消できます。

例外が発生するサンプルコード

class Sample {

  public static void main(String[] args) {

    // nullで初期化
    String sScore = null;

    // int型に変換
    int score = Integer.parseInt(sScore);

    // 変換した値を表示
    System.out.println(score);
  }
}
実行結果
Exception in thread "main" java.lang.NumberFormatException: Cannot parse null string
	at java.base/java.lang.Integer.parseInt(Integer.java:630)
	at java.base/java.lang.Integer.parseInt(Integer.java:786)
	at Sample.main(Sample.java:9)

解消例

class Sample {

  public static void main(String[] args) {

    // nullで初期化
    String sScore = null;

    // "80"を代入
    sScore = "80";

    // int型に変換
    int score = Integer.parseInt(sScore);

    // 変換した値を表示
    System.out.println(score);
  }
}
実行結果
80

数値型に変換できない文字が含まれる場合

数値に変換できない文字が含まれる場合は、NumberFormatExceptionが発生してしまいます。

例えば、下記のサンプルコードの場合「100点」という文字には、数値に変換できない「点」という文字が含まれるため、NumberFormatExceptionが発生します。

「100点」と表示したい場合、変数には点数の数字のみを代入し、表示する際に「点」と加えれば例外は発生しません。

例外が発生するサンプルコード

class Sample {

  public static void main(String[] args) {

    // "100点"で初期化
    String sScore = "100点";

    // int型に変換
    int score = Integer.parseInt(sScore);

    // 変換した値を表示
    System.out.println(score);
  }
}
実行結果
Exception in thread "main" java.lang.NumberFormatException: For input string: "100点"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
	at java.base/java.lang.Integer.parseInt(Integer.java:668)
	at java.base/java.lang.Integer.parseInt(Integer.java:786)
	at Sample.main(Sample.java:9)

解消例

class Sample {

  public static void main(String[] args) {

    // "100"で初期化
    String sScore = "100";

    // int型に変換
    int score = Integer.parseInt(sScore);

    // 変換した値を表示
    System.out.println(score + "点");
  }
}
実行結果
100点

データ型の範囲を超えている場合

データ型の範囲を超えた値を代入した場合、NumberFormatExceptionが発生してしまいます。

整数のみ格納可能であるint型変数に対して、小数点を含む浮動小数点型の値を代入すると、NumberFormatExceptionが発生します。
格納する値に応じた正しい変数を使用しましょう。

NumberFormatExceptionが発生するサンプルコード

class Sample {

  public static void main(String[] args) {

    // "123.45"で初期化
    String sScore = "123.45";

    // int型に変換
    int score = Integer.parseInt(sScore);

    // 変換した値を表示
    System.out.println(score);
  }
}
実行結果
Exception in thread "main" java.lang.NumberFormatException: For input string: "123.45"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
	at java.base/java.lang.Integer.parseInt(Integer.java:668)
	at java.base/java.lang.Integer.parseInt(Integer.java:786)
	at Sample.main(Sample.java:9)

変数の型を変更したソースコード

class Sample {

  public static void main(String[] args) {

    // "123.45"で初期化
    String sScore = "123.45";

    // double型に変換
    double score = Double.parseDouble(sScore);

    // 変換した値を表示
    System.out.println(score);
  }
}
実行結果
123.45

NumberFormatExceptionのまとめ

【Java初心者向け】NumberFormatExceptionとは?原因・解消方法

今回は、プログラミング初心者が最初につまづく例外のひとつ、NumberFormatExceptionについて解説しました。

NumberFormatExceptionとは、文字列を数値型に変換する際、文字列の形式が正しくない場合にスローされる例外です。

主に下記のような場合に発生します。

  • 文字列がnullの場合
  • 数値型に変換できない文字が含まれている場合
  • データ型の値の範囲を超えている場合

例外がどのような場合に発生するのか、原因が理解できれば対策は難しくありません。NumberFormatException発生時は、「変数の型と格納する値が正しいか」に注目しましょう。

この他にも初心者がつまづきやすい例外について、今後も引き続きご紹介していく予定です!

当校テクドリは無料プログラミングスクールです。現役エンジニアの講師が学習をしっかりサポートします!

6ヶ月以上の学習期間が設けられているため、プログラミング未経験者でも安心して学べます。

卒業後は、運営企業のメディアファイブへ正社員のITエンジニアとして採用されるため、就職、転職活動は不要です。

ご興味がある方は、ぜひ下記リンクから無料体験セミナーにお申し込みください!

まずは無料説明会・体験セミナー

テックドリームは無料のプログラミングスクールです。「プログラマってどういう仕事?」「自分にできるのかな?」という方も、まずは体験セミナーでプログラミングに触れてみませんか?テックドリームは未経験の方を丁寧にサポートする体制をご用意しています。不安なことや、入校までの疑問点なども気軽にご相談いただけます。

Webかんたん予約

専用の予約フォームより、およそ60秒で簡単にお申込みいただけます。

電話でのご予約

Webかんたん予約ができない場合や、ご質問がございましたら、お気軽にお電話ください。

0120-262-242
9:00~18:00(土日祝を除く)
【Java初心者向け】NumberFormatExceptionとは?原因・解消方法
最新情報をチェックしよう!
>テクド・リム

テクド・リム


「テクドリ」の公式キャラクター。
エンジニアだった父の影響を受けて、夢に向かって日々勉強に励むエンジニアのタマゴ。
夢は「世界を変える、すごいエンジニアになること!」

彼女が通うプログラミングスクールについては「テクドリとは」ページにて紹介中!

CTR IMG