スキャナで取得した値を指定したデータ型の値として取得する

Scanner クラスを利用すると標準入力やファイルから値を読み込むことができますが、 next メソッドでは取得した値を文字列として扱います。もし取得する値を数値として扱いたい場合には、 nextInt メソッドなどそれぞれのデータ型毎に専用のメソッドが用意されています。ここでは Java のスキャナで取得した値を指定したデータ型の値として取得する方法について解説します。

(Last modified: )

数値としてスキャナから値を取得する

スキャナから取得する値を文字列ではなく数値として取得することができます。データ型毎に使用するメソッドが異なりますが、例として int 型の値として取得するには Scanner クラスで用意されている nextInt メソッドを使います。書式は次のとおりです。

public int nextInt()

戻り値:
入力からスキャンしたint

例外:
InputMismatchException - 次のトークンがInteger正規表現に一致しないか範囲外である場合
NoSuchElementException - スキャンする入力がなくなった場合
IllegalStateException - このスキャナがクローズしている場合

入力ストリームの現在の位置から次の区切り文字までの値を int 型の値として受けとります。区切り文字はデフォルトでは空白文字です。

例えばキーボードから 27 と入力した場合、 next メソッドの場合は文字列の "27" として返されますが、 nextInt メソッドの場合は整数の 27 として返されます。

※ 標準入力を利用したスキャナの基本的な使い方については「キーボードから入力された値を取得する(Scanner.next,Scanner.nextLine)」を参照されてください。

次のサンプルを見てください。

import java.util.Scanner;

class JSample2_1{
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);

    System.out.println("年齢を入力してください");
    int old = scanner.nextInt();

    System.out.println("年齢は" + old + "です");
  }
}

標準入力から値を取得する Scanner クラスのインスタンスを作成し、そのあとで nextInt メソッドを使ってキーボードからの入力待ちとなります。

数値としてスキャナから値を取得する(1)

キーボードで値を入力し最後に Enter キーが押されるとキーボードからの入力が終わります。すると入力された値の中で区切り文字(デフォルトでは空白文字)までの値を受け取り、変数 old に格納します。今回は入力された値を int 型の値として受け取ります。

数値としてスキャナから値を取得する(2)

もし int 型の値に変換できない値を入力すると InputMismatchException 例外が発生します。

数値としてスキャナから値を取得する(3)

必要であれば次のように例外処理を記述してください。

import java.util.Scanner;
import java.util.InputMismatchException;

class JSample2_2{
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);

    try{
      System.out.println("年齢を入力してください");
      int old = scanner.nextInt();

      System.out.println("年齢は" + old + "です");
    }catch (InputMismatchException e){
      System.out.println("数値を入力してください");
    }
  }
}

数値としてスキャナから値を取得する(4)

なお next メソッドで文字列として取得したあとで Integer クラスの parseInt メソッドを使って次のように int 型の値に変換することもできます。

Scanner scanner = new Scanner(System.in);

System.out.println("年齢を入力してください");
String old = scanner.next();
int numold = Integer.parseInt(old);

※ 文字列を数値に変換する方法については「文字列を数値に変換する」を参照されてください。

基数を指定して数値を取得する

Scanner クラスではデフォルトの基数が 10 となっているため、先ほど使用した nextInt メソッドでは入力された値が 10 進数の値として扱われます。その為、先ほどのサンプルで 2F などのように 16 進数の値を入力すると、数値として扱われずに例外が発生します。

基数を指定して数値を取得する(1)

10 進数以外の基数の数値を入力した場合でも数値として受け取る場合には、基数を引数に指定する nextInt メソッドを使用します。書式は次のとおりです。

public int nextInt(int radix)

パラメータ:
radix - トークンをint値として解釈するために使用する基数

戻り値:
入力からスキャンしたint

例外:
InputMismatchException - 次のトークンがInteger正規表現に一致しないか範囲外である場合
NoSuchElementException - スキャンする入力がなくなった場合
IllegalStateException - このスキャナがクローズしている場合
IllegalArgumentException - 基数が範囲外の場合

入力ストリームの現在の位置から次の区切り文字までの値を int 型の値として受けとります。このとき、値は 1 番目の引数で指定した基数に基づいた数値として扱われます。区切り文字はデフォルトでは空白文字です。

例えばキーボードから 16 進数の値を入力する場合には、基数として 16 を指定します。 2 進数であれば基数は 2 です。

次のサンプルを見てください。基数として 16 を指定しています。

import java.util.Scanner;
import java.util.InputMismatchException;

class JSample2_3{
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);

    try{
      System.out.println("年齢を入力してください");
      int old = scanner.nextInt(16);

      System.out.println("年齢は" + old + "です");
    }catch (InputMismatchException e){
      System.out.println("数値を入力してください");
    }
  }
}

プログラムを実行し、キーボードから "2F" と入力すると 16 進数で記述された数値として nextInt メソッドの戻り値で返されます。

基数を指定して数値を取得する(2)

なお変数に格納された値を画面に出力すると 10 進数に変換されて出力されます。( 16 進数で 2F は 10 進数で 47 です)。

int型以外データ型の値として取得する場合のメソッド

Scanner クラスの nextInt メソッドは取得した値を int 型の値として受け取る場合のメソッドですが、他のデータ型の値として取得する場合はそれぞれ次のようなメソッドが用意されています。

public boolean nextBoolean()
public byte nextByte()
public byte nextByte(int radix)
public short nextShort()
public short nextShort(int radix)
public long nextLong()
public long nextLong(int radix)
public float nextFloat()
public double nextDouble()
public BigInteger nextBigInteger()
public BigInteger nextBigInteger(int radix)
public BigDecimal nextBigDecimal()

整数に関するデータ型の場合は、基数を引数に指定するメソッドも用意されています。

-- --

Java のスキャナで取得した値を指定したデータ型の値として取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。