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

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

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

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

目次

    NumberFormatExceptionとは

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

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

    Could not retrieve HTML for embedding from https://tech-dream.school/archives/category/study/programming/lang/5116

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

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

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

    Could not retrieve HTML for embedding from https://tech-dream.school/archives/category/study/programming/lang/467

    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発生時は、「変数の型と格納する値が正しいか」に注目しましょう。

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

    まずは選考会へ!

    「プログラマーになって一緒に働きませんか?」
    テックドリームの選考会は、選考だけでなく「相互理解」の場。不安なことも直接ご相談いただけます。


    電話でのご予約

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

    0120-262-242
    9:00~18:00(土日祝を除く)

     

    >テクド・リム

    テクド・リム


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

    CTR IMG