JavaマスターJavaプログラムサンプル集例外のサンプル → NumberFormatException対策

NumberFormatException対策

ユーザの入力値を読み取るのによく使うInteger.parseIntメソッドと、 それを使った場合に発生するNumberFormatExceptionについて 説明します。

下のソースをご覧ください。

samples/exception/NumberFormatExceptionTest.java - Eclipse SDK
package samples.exception;

public class NumberFormatExceptionTest {
  public static void main(String[] args) {
    int i;
    try {
      i = Integer.parseInt("a");
      System.out.println(i);
      
    catch (Exception e) {
      e.printStackTrace();
    }
    
    try {
      i = Integer.parseInt("a"16);
      System.out.println(i);
      
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}

IntegerクラスのparseIntメソッドは、文字列を数値(整数)に 変換するメソッドです。 このメソッドに、「123」など、数字だけで構成された文字列を 渡した場合は、問題なく実行できるのですが、 ここでは「a」という文字を使って、例外を発生させています。

コマンド プロンプト

C:\JavaMaster\bin>java -cp . samples.exception.NumberFormatExceptionTest 
java.lang.NumberFormatException: For input string: "a"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at samples.exception.NumberFormatExceptionTest.main(NumberFormatExceptionTest.java:7)
10

1つ目のtry〜catch では、「a」という、整数として認識できない 文字列をparseIntに渡しているので、 NumberFormatException例外が発生します。

2つ目のtry〜catch でも「a」という文字列を使っていますが、 第2引数に「16」という数値を指定しています。 これは、与えた文字列を16進数として解析するという意味です。 ですから、16進数の「a」(10進数の「10」)として無事に解析が 行われ、「10」が表示されます。