NumberFormatException は、文字列を float や integer などの数値に変換しようとしたときに、入力文字列の形式が適切でないか、不正である場合にスローされます。不正な形式とは、文字列を整数に解析しようとしているが、その文字列にブール値が含まれている場合、その形式が不正であることを意味します。たとえば、文字列を整数に解析しようとしたが、文字列が null だった場合です。
それはチェックされていない例外です。のサブクラスです IllegalArgumentException そして実装します シリアル化可能 インターフェース。
ダイアナ・メアリー・ブラッカー
NumberFormatException のコンストラクター
コンストラクタ | 説明 |
---|---|
NumberFormatException() | これにより、詳細メッセージが指定されていない NumberFormatException が構築されます。 |
NumberFormatException(文字列) | これにより、文字列 s に詳細な指定メッセージを含む NumberFormatException が構築されます。 |
NumberFormatException の例
public class Example { public static void main(String[] args) { int a = Integer.parseInt(null); //throws Exception as //the input string is of illegal format for parsing as it is null. } }
出力:
NumberFormatException の一般的な理由
NumberFormatException は、例外をスローしているメソッドの対応する引数の文字列の形式が不適切であるために発生するため、さまざまな方法が考えられます。そのうちのいくつかは次のように言及されています-
- 指定された入力文字列が null である可能性があります。
例- Integer.parseInt(null); - 入力文字列が空である可能性があります。
例- Integer.parseInt(''); - 入力文字列の末尾にスペースがある可能性があります。
例- Integer.parseInt('123'); - 入力文字列の先頭にスペースが含まれている可能性があります。
例- Integer.parseInt(' 123'); - 入力文字列には英数字を使用できます。
例- Long.parseLong('b2'); - 入力文字列には、解析された文字列を格納するデータ型の範囲を超える可能性のある入力が含まれている可能性があります。
例- Integer.parseInt('135');整数の最大値は 127 ですが、文字列の値は範囲外の 135 であるため、例外がスローされます。 - 入力文字列と解析に使用されているメソッドのタイプの間に不一致がある可能性があります。 「1.0」のような入力文字列を指定し、この文字列を整数値に変換しようとすると、NumberFormatException 例外がスローされます。
例- Integer.parseInt('1..0');
NumberFormatException を回避するにはどうすればよいですか?
NumberFormatException は基本的に、入力文字列が適切にフォーマットされていない、または数値に解析する際に不正であることが原因で発生します。したがって、この例外を回避するには、提供される入力文字列が適切にフォーマットされている必要があります。
有効で適切にフォーマットされた文字列を取得するには、まず入力文字列が null でないかどうかを確認します。次に、不要なスペースをチェックしてすべてを削除し、その後、引数の文字列が文字列の解析に使用しているメソッドの型と一致することを確認するためにいくつかのチェックを行います。メソッドが ParseInt() の場合は、文字列が整数値であることを確認し、他のすべてのメソッドについても同様に必要なチェックを実行します。
Java プログラムが NumberFormatException を生成しないようにするには、以下に示すように、この例外をスローするコード行を try-catch ブロックで囲むことを常にお勧めします。
public class NumberFormatExceptionExample { private static final String inputString = '123.33'; public static void main(String[] args) { try { int a = Integer.parseInt(inputString); }catch(NumberFormatException ex){ System.err.println('Invalid string in argumment'); //request for well-formatted string } } }