【Java】java.lang.NumberFormatException


開発をしていて起きた例外とその対策を記載します。

今回は「NumberFormatException」について記載します。

NumberFormatExceptionって何?

NumberFormatExceptionをはじめて見て戸惑っている方、何故起きているのか分からない方もいると思いますので説明をしますと

アプリケーションが文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合にスローされます。
引用:Java™ Platform Standard Edition 7

ということです。そのままの意味ですね。

対策は?

「アプリケーションが文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合にスロー」なので、
そもそも正しい形式の文字列を入れる・例外が起きた場合の処理を入れるなどすることが対策となります。

サンプルコード

以下をメモ帳やエディタにコピペしてください。
まずはNumberFormatExceptionを起こします。

class Sample{
	
	public static void main(String[] args){
		
		String string= "stringだよー";
		
		Integer integer = Integer.parseInt(string);
		
		System.out.println(integer);
		
	}
	
}

これを実行してみますと…

NumberFormatExceptionが起きました。
「stringだよー」という文字列だとIntegerにパースできないからNumberFormatExceptionを起こしたよって言われていますね。

で、表示されるのを回避するためにtry catch文を使います。

class Sample{
	
	public static void main(String[] args){
		
		String string= "stringだよー";
		Integer integer;
		try {
			
			// NumberFormatExceptionが起きる処理はここ
			integer = Integer.parseInt(string);
			
		} catch (NumberFormatException e) {
			
			// NumberFormatExceptionが起きた場合はここに入る
			System.out.println("整数への変換に失敗しました。");
			return;
			
		}
		
		System.out.println(integer);
		
	}
	
}

実行すると…「整数への変換に失敗しました。」と表示され「NumberFormatException」が表示されなくなりました。

まとめ

・NumberFormatExceptionは文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合にスローされる例外
・そもそも正しい形式の文字列を入れる・例外が起きた場合の処理を入れるなど対策をする
・中断せずにプログラムで処理したい場合はtry catch文を使う

今回はNumberFormatExceptionを紹介しました。
いきなり例外がでるとユーザーもびっくりしますし、フォーマットチェックをするなど確実にNumberFormatExceptionがでないと言い切れる場合はわざわざtry catch文を書く必要はないと思いますが、それ以外の場合はtry catch文した方が良いかと思います。

  • このエントリーをはてなブックマークに追加

PAGE TOP