本サイトでは、無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の講師が、未経験者に向けてプログラミングの基礎を解説する記事を公開しています。
今回の記事テーマは「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のまとめ
今回は、プログラミング初心者が最初につまづく例外のひとつ、NumberFormatExceptionについて解説しました。
NumberFormatExceptionとは、文字列を数値型に変換する際、文字列の形式が正しくない場合にスローされる例外です。
主に下記のような場合に発生します。
- 文字列がnullの場合
- 数値型に変換できない文字が含まれている場合
- データ型の値の範囲を超えている場合
例外がどのような場合に発生するのか、原因が理解できれば対策は難しくありません。NumberFormatException発生時は、「変数の型と格納する値が正しいか」に注目しましょう。
この他にも初心者がつまづきやすい例外について、今後も引き続きご紹介していく予定です!
当校テクドリは無料プログラミングスクールです。現役エンジニアの講師が学習をしっかりサポートします!
6ヶ月以上の学習期間が設けられているため、プログラミング未経験者でも安心して学べます。
卒業後は、運営企業のメディアファイブへ正社員のITエンジニアとして採用されるため、就職、転職活動は不要です。
ご興味がある方は、ぜひ下記リンクから無料体験セミナーにお申し込みください!