【Java】キーボードから入力された値を受け取る方法

Java

今回の記事ではJavaを使ってキーボードから入力された値を受け取る方法について解説していきます。

Javaでキーボードから入力された値を受け取る方法は主に次の2つがあります。

  • BefferedReaderクラスを使う
  • Scannerクラスを使う

それぞれの方法について解説していきます!

BefferedReaderでキーボードからの入力値を受け取る

まずはBefferedReaderでキーボードからの入力を受け取る方法について解説していきます。
次のプログラムを確認してください。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestInputStreamReader {

	public static void main(String[] args) {

		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);

		System.out.println("好きなプログラミング言語を入力してください");

		try {
			// readLineメソッドで入力値を受け取る
			String gengo = br.readLine();
			br.close();
			System.out.println("あなたの好きなプログラミング言語は" + gengo + "なんですね");
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
}

最初にInputStreamReaderクラスのインスタンスを生成します。
その次にBefferedReaderクラスのインスタンスを生成します。
この時に先ほど生成したInputStreamReaderクラスのインスタンスを引数をして渡します。

生成されたBefferedReaderクラスのインスタンスのreadLineメソッドを呼び出すことでキーボードからの入力を受け取ることができます。

実行結果

実行するとまず文字列の出力がされます。
その状態でキーボードの入力待ちの状態となります。

好きなプログラミング言語を入力してください

入力待ちの状態で文字を入力してenterを押すと入力を受け取ることができます。

好きなプログラミング言語を入力してください
Java
あなたの好きなプログラミング言語はJavaなんですね

Scannerクラスを使ってキーボードからの入力値を受け取る

次にScannerクラスを使ってキーボードからの入力値を受け取る方法について解説していきます。
Scannerクラスは入力を受け付けるための様々なメソッドが用意されているため、用途に応じてメソッドを使い分けることができます。

nextメソッドで受け取る

まずはnextメソッドでキーボードからの入力を受け付けるコードを解説していきます。

import java.util.Scanner;

public class TestKeyboard {

	public static void main(String[] args) {

		// Scannerクラスのインスタンスを生成
		Scanner scan = new Scanner(System.in);

		System.out.println("好きなプログラミング言語を入力してください");
		// nextメソッドで入力値を受け取る
		String gengo = scan.next();

		// 受け取った値を出力
		System.out.println("あなたの好きなプログラミング言語は" + gengo + "なんですね");
	}

}

上記プログラムは次のような処理を順番に実行しています。

  • Scannerクラスのインスタンスを生成
  • 生成したインスタンスのnextメソッドを呼び出してユーザーの入力を待つ
  • 受け取った値を変数gengoに代入する
  • gengoを使って出力する

実行結果

実行すると最初に「好きなプログラミング言語を入力してください」と出力され、キーボードからの入力待ちになります。

好きなプログラミング言語を入力してください

言語を入力して「Enter/return」キーを押すと入力された値を受け取り、出力がされます。

好きなプログラミング言語を入力してください
Java
あなたの好きなプログラミング言語はJavaなんですね

ユーザーからの入力を受け取ることができました!

複数の値の入力

nextメソッドの特徴として、区切り文字までの値を受け取るというものがあります。
区切り文字というのはデフォルトで空白文字が設定されていて、半角スペースやタブ、改行などが含まれます。
これらの空白文字が入力されると、その後の入力値は無視されます。

例えば先ほどのプログラムを実行して次のように入力したとします。

好きなプログラミング言語を入力してください
Java Python

これでEnterを押すと次のように「Java」だけ受け取られていることがわかります。

好きなプログラミング言語を入力してください
Java Python
あなたの好きなプログラミング言語はJavaなんですね

では2つの値を半角スペース区切りで受け取りたい場合はどうすれば良いでしょうか?
その解決策の一つとしてnextメソッドを2回呼び出しておくというものがあります。
プログラムを次のように修正します。

public static void main(String[] args) {

	// Scannerクラスのインスタンスを生成
	Scanner scan = new Scanner(System.in);

	System.out.println("好きなプログラミング言語をスペース区切りで入力してください");
	// nextメソッドで入力値を受け取る
	String gengo1 = scan.next();
	String gengo2 = scan.next();

	// 受け取った値を出力
	System.out.println("あなたの好きなプログラミング言語は" + gengo1 + "と" + gengo2 + "なんですね");
}

上記のプログラムを実行し、半角スペース区切りで文字を入力してみます。

好きなプログラミング言語をスペース区切りで入力してください
Java Python

すると2つとも受け取ることができることがわかります。

好きなプログラミング言語をスペース区切りで入力してください
Java Python
あなたの好きなプログラミング言語はJavaとPythonなんですね

nextLineメソッドで1行丸ごと受け取る

次にnextLineメソッドで1行丸ごと受け取る方法を解説していきます。
先ほどのnextメソッドでは半角スペースなどの区切り文字が入力されると、そこまでしか入力された値を受け取ることができませんでした。

しかしnextLineメソッドを使うことで、空白文字を無視して1行丸ごとキーボードからの入力を受け取ることができます。
次のプログラムを見てください。こちらは先ほどのnextメソッドをnextLineメソッドに変更したものです。

import java.util.Scanner;

public class TestKeyboard {

	public static void main(String[] args) {

		// Scannerクラスのインスタンスを生成
		Scanner scan = new Scanner(System.in);

		System.out.println("好きなプログラミング言語を入力してください");
		// nextLineメソッドで入力値を1行全て受け取る
		String gengo = scan.nextLine();

		// 受け取った値を出力
		System.out.println("あなたの好きなプログラミング言語は" + gengo + "なんですね");
	}

}

実行結果

上記のプログラムを実行して、スペース区切りでキーボードを使って入力してみます。

好きなプログラミング言語を入力してください
Java Python Ruby

すると全ての入力値を受け取ることができていることがわかります。

好きなプログラミング言語を入力してください
Java Python Ruby
あなたの好きなプログラミング言語はJava Python Rubyなんですね

nextIntメソッドでint型を受け取る

最後にnextIntメソッドについて解説していきます。
これまでみてきたnextメソッドやnextLineメソッドは入力値をString型として受け取るものでした。
しかしnextIntメソッドを利用することで、int型の変数として受け取ることができます。
次のプログラムを確認してください。

import java.util.Scanner;

public class TestKeyboard {

	public static void main(String[] args) {

		// Scannerクラスのインスタンスを生成
		Scanner scan = new Scanner(System.in);

		System.out.println("好きな整数値を入力してください");
		// nextIntメソッドで整数値を受け取る
		int num = scan.nextInt();

		// 受け取った値を出力
		System.out.println("あなたの好きな数字は" + num + "なんですね");
	}

}

実行結果

上記のプログラムを実行すると数字の入力を受け付けることができます。

好きな整数値を入力してください
7
あなたの好きな数字は7なんですね

ここでは一例としnextIntメソッドを紹介しましたが、他にもnextFloat、nextDoubleなど型に応じたメソッドが用意されているので、受け取りたい値に応じてメソッドを使い分けることができます。

おまけ:nextIntメソッドで整数値以外を入力した場合

おまけです。
nextIntメソッドを呼び出した時に整数値以外を入力するとどうなるでしょうか?

好きな整数値を入力してください
e
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at keyboard.TestKeyboard.main(TestKeyboard.java:14)

InputMismatchExceptionが発生しました。
nextIntメソッドを利用するときは整数値以外が入力される可能性も考慮したプログラムを書くとより良いプログラムを書くことができるようになります。

BefferedReaderとScannerクラスの違い

今回の記事ではBefferedReaderとScannerクラスを使ってキーボードからの入力を受け取る方法を紹介してきました。
ではこの二つの違いはどんなものがあるでしょうか?

1つ目は受け取ることができる型です。
BefferedReaderはString型しか受け取ることができません。
一方Scannerは様々なメソッドを使い分けることでいろいろな方を受け取ることができます。

2つ目はBefferedReaderは利用する際にIOExceptionの発生に備えてtry-catch文を使って対処する必要があります。
しかしScannerであればこのような対処をする必要はありません。
とはいってもnextIntを使った時に整数値以外が入力されることも考慮するとなると同じようにtry-catchを記述する必要があるかもしれません。

3つ目はBefferedReaderの方がパフォーマンスに優れているということです。

まとめ

今回の記事ではJavaでキーボードから入力を受け取る方法を紹介しました!
JavaではBefferedReaderとScannerを使うことでキーボードからの入力を受け取ることができます。
BefferedReaderとScannerの違いを理解して、状況に応じて使い分けることができるようにしましょう!

またScannerクラスには様々なメソッドが用意されているため、用途に応じてメソッドを使い分けることができます!

プログラミング初心者からWebアプリを開発できるようになってエンジニアに就職・転職するまでの学習手順をまとめた記事もあります!
こちらもぜひご覧ください!!

【おすすめエージェント紹介】プログラミング初心者からエンジニアになるまでのロードマップ
この記事ではプログラミング初心者がWebアプリを開発できるようになるまでのロードマップを解説しています。プログラミング学習方法は書籍・動画コンテンツ・プログラミングスクールの3つがあります。それぞれの学習段階でおすすめの教材を紹介し、Webアプリを開発できるようになるまでの学習方法を知ることができます。
タイトルとURLをコピーしました