カテゴリ: Java 更新日: 2025/09/18

JavaのScannerクラスのhasNextメソッドを徹底解説!初心者でもわかる使い方と活用方法

ScannerのhasNextメソッド
ScannerのhasNextメソッド

先生と生徒の会話形式で理解しよう

生徒

「Javaで、入力がまだ続くかどうかを確認する方法ってありますか?」

先生

「はい、JavaのScannerクラスには、次の入力があるかどうかを確認できるhasNextメソッドがあります。」

生徒

「次のデータがあるかどうかをチェックするって、どういうときに使うんですか?」

先生

「たとえば、キーボードやファイルから複数の値を順に読み取る場合、hasNextで次があるかをチェックしてから読み取ると安全ですよ。では実際に使い方を見ていきましょう。」

1. Scannerクラスとは?

1. Scannerクラスとは?
1. Scannerクラスとは?

JavaのScannerクラスは、ユーザーからのキーボード入力やファイル、文字列などからデータを読み取るために使われる基本的なクラスです。初心者でも簡単に文字や数値を読み取ることができるので、Javaの入力処理では定番のクラスとなっています。

このクラスはjava.utilパッケージに含まれており、使用するにはimport java.util.Scanner;を最初に書いておく必要があります。

2. hasNextメソッドとは?

2. hasNextメソッドとは?
2. hasNextメソッドとは?

hasNextメソッドは、Scannerクラスで次に読み取る要素が存在するかどうかを確認するためのメソッドです。これは戻り値としてboolean(真偽値)を返します。次に読み込むデータが存在するならtrue、無ければfalseを返します。

このメソッドは、読み込みを安全に行うための確認として非常に重要です。特にループ処理で、入力が終わるまで繰り返すときに使うことが多いです。

3. hasNextメソッドの基本的な使い方

3. hasNextメソッドの基本的な使い方
3. hasNextメソッドの基本的な使い方

以下は、キーボードから複数の単語を読み取って、すべて出力する例です。hasNextで入力がまだあるかどうかを確認しながら、nextで実際に読み取っていきます。


import java.util.Scanner;

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

        System.out.println("入力してください(終了するには Ctrl + D または Ctrl + Z):");
        while (scanner.hasNext()) {
            String word = scanner.next();
            System.out.println("入力された単語: " + word);
        }

        scanner.close();
    }
}

4. hasNextを使うときの典型的なシーン

4. hasNextを使うときの典型的なシーン
4. hasNextを使うときの典型的なシーン

hasNextメソッドは、ファイルからの読み取りや文字列の分解処理にも使われます。たとえば、テキストファイルに書かれた数値や文字を1つずつ読み取るときに、ファイルの終わりまでhasNextを使って処理できます。

また、ScannerクラスにはhasNextInt()hasNextDouble()といった、型に特化したhasNextも用意されています。

5. hasNextとnextの組み合わせ

5. hasNextとnextの組み合わせ
5. hasNextとnextの組み合わせ

通常、hasNextnextはセットで使います。hasNextで次の入力があることを確認してからnextを使わないと、入力がないときにNoSuchElementExceptionが発生するおそれがあります。

安全で確実に入力を処理するためには、hasNextで確認してからnextで読み取るのが基本です。

6. 文字列からScannerとhasNextを使う例

6. 文字列からScannerとhasNextを使う例
6. 文字列からScannerとhasNextを使う例

文字列をScannerクラスで読み取る場合もhasNextは使えます。たとえば以下のように、カンマで区切られた文字列を読み取ることができます。


import java.util.Scanner;

public class StringScannerExample {
    public static void main(String[] args) {
        String text = "りんご,みかん,バナナ";
        Scanner scanner = new Scanner(text);
        scanner.useDelimiter(",");

        while (scanner.hasNext()) {
            String fruit = scanner.next();
            System.out.println("フルーツ: " + fruit);
        }

        scanner.close();
    }
}

このように、useDelimiterで区切り文字を設定することで、自由な形式の文字列にも対応できます。

7. hasNextがfalseを返すタイミング

7. hasNextがfalseを返すタイミング
7. hasNextがfalseを返すタイミング

hasNextfalseを返すのは、入力が終了したときです。たとえばキーボード入力でCtrl + D(Linux/Mac)やCtrl + Z(Windows)を押すと、入力ストリームが閉じられ、以降のhasNextfalseを返します。

ファイルから読み取っている場合も、最後まで読み終えたタイミングでhasNextfalseになります。

8. hasNextとループ処理の相性

8. hasNextとループ処理の相性
8. hasNextとループ処理の相性

JavaでScannerクラスのhasNextメソッドを使ったループ処理は、入力の終了条件がはっきりしない場合にとても便利です。たとえば、何個の値を入力するか決まっていない場合でも、hasNextで入力の続きがある限り読み取りを続けられるため、動的なデータ処理に向いています。

このような柔軟な入力処理が可能になるのは、ScannerクラスとhasNextメソッドの組み合わせのおかげです。

9.まとめ

9.まとめ
9.まとめ

JavaのScannerクラスのhasNextメソッドは、次に読み取る入力が存在するかを確認するために非常に重要な役割を持っています。特にループ処理において、ユーザーからの入力やファイルデータを安全に、確実に処理するために欠かせないメソッドです。

初心者が陥りやすいエラーとして、入力が無いのにnextを実行してNoSuchElementExceptionが発生するというケースがあります。これを回避するためには、必ずhasNextで確認をしてからnextを呼び出すという、基本的な使い方を身につけることが大切です。

また、ScannerクラスにはさまざまなhasNextメソッドのバリエーションがあり、hasNextInthasNextDoubleなど、型ごとに存在します。これらを使い分けることで、より精密な入力判定が可能になります。

実践的な応用として、標準入力だけでなく、文字列やファイルからの入力にもhasNextを活用することができます。以下は、数値のみを読み取って合計を計算する例です。ファイル処理やユーザー入力の集計処理に役立つ典型的なパターンです。


import java.util.Scanner;

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

        System.out.println("数値を入力してください(終了するには Ctrl + D または Ctrl + Z):");
        while (scanner.hasNextInt()) {
            int num = scanner.nextInt();
            sum += num;
        }

        scanner.close();
        System.out.println("合計: " + sum);
    }
}

このように、hasNextIntnextIntを組み合わせれば、数値以外の入力を排除しながら安全に読み取ることができます。Scannerの入力確認メソッドは、入力の種類に応じて柔軟に選ぶことができるのです。

Javaでデータの入力を扱う際は、常に「次の入力が存在するか?」という視点を持ってプログラムを設計しましょう。これにより、実行中の予期せぬエラーを防ぎ、安定したアプリケーションの開発が可能になります。

Java初心者の方は、まずはhasNextnextの使い方に慣れ、その後はhasNextLinehasNextIntといった発展的なメソッドにも挑戦してみてください。入力処理の理解が深まると、より柔軟で実用的なプログラムが作れるようになります。

先生と生徒の振り返り会話

生徒

hasNextって、ただ入力があるかを調べるだけかと思っていたけど、すごく重要なんですね!」

先生

「そうですね。安全にデータを読み取るためには、必ずhasNextで事前確認するのがポイントなんです。」

生徒

hasNextIntとかもあるって聞いて、入力の種類に応じて使い分けられるのは便利だなと感じました。」

先生

「その通りです。正しいメソッドを選べば、より安全で効率的なプログラムが書けるようになりますよ。繰り返し使って慣れていきましょう。」

生徒

「今日のサンプルプログラムも試して、理解をもっと深めてみます!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

JavaのScannerクラスって何に使うんですか?どんなときに使うのが一般的ですか?

Scannerクラスは、Javaでキーボードからの入力やファイルの読み取り、文字列の分解などに使われます。ユーザーから値を入力させたり、外部のデータを取り込んだりするときに非常によく使われる、Javaの標準入力処理の基本的なクラスです。

JavaのhasNextメソッドの役割は何ですか?なぜ必要なんですか?

hasNextメソッドは、次に読み取る入力データがあるかどうかを事前に確認するためのJavaのScannerクラスのメソッドです。入力がない状態で読み取ろうとするとエラーが発生するため、hasNextで確認してからnextで読み取るのが安全な使い方です。

ScannerクラスのhasNextIntやhasNextDoubleは、普通のhasNextとどう違うんですか?

hasNextIntやhasNextDoubleは、次の入力がそれぞれint型やdouble型の数値かどうかを判定するためのメソッドです。通常のhasNextは単に何か入力があるかどうかを確認しますが、型ごとにチェックすることで、より厳密で安全な入力処理ができます。

JavaでScannerのhasNextメソッドを使うとき、nextとセットで使う理由は何ですか?

nextだけを使って入力を読み取ろうとすると、次のデータが存在しない場合に例外(NoSuchElementException)が発生します。hasNextで先に確認してからnextを使えば、安全に入力データを処理できます。これはJavaプログラムの入力処理の基本です。

文字列の中から特定の区切りでデータを取り出すときにも、ScannerのhasNextは使えますか?

はい、使えます。ScannerのuseDelimiterメソッドで区切り文字を指定すれば、たとえばカンマ区切りの文字列から個々の要素をhasNextとnextの組み合わせで順番に取り出すことができます。CSV形式のようなデータ処理にも活用可能です。

Scannerクラスでキーボード入力の終了って、どうやって判断するんですか?

キーボード入力の終了は、WindowsではCtrl + Z、MacやLinuxではCtrl + Dで入力ストリームが閉じられます。以降のhasNextはfalseを返すので、これをもとに入力の終了を判断するのが一般的なJavaの書き方です。

JavaのScannerとhasNextを使って、ユーザーの入力をずっと読み取り続けるにはどうしたらいいですか?

hasNextを条件としたwhile文を使えば、次の入力が存在する限りループし続けます。ユーザーが入力を続ける限り、プログラムは入力を読み取って処理し続けることができます。これは動的なデータ入力に向いた処理方法です。

ScannerのhasNextでfalseが返ってくるのはどんなときですか?

hasNextがfalseを返すのは、入力ストリームが終わったときです。たとえば、ユーザーが終了操作(Ctrl + D や Ctrl + Z)を行った場合や、ファイルの終わりまで読み取ったときなどにfalseになります。

JavaでScannerクラスを使うときに、import文は毎回必要なんですか?

はい、必要です。Scannerクラスはjava.utilパッケージに属しているため、Javaプログラムの先頭で「import java.util.Scanner;」と書いておく必要があります。これを忘れるとコンパイルエラーになります。

ScannerとhasNextの使い方に慣れるには、どんな練習をすればいいですか?

まずはキーボードからの入力を読み取る簡単なプログラムを繰り返し作ってみるのがおすすめです。次に文字列やファイル入力を使ってみたり、hasNextIntやhasNextLineなどの応用メソッドにも挑戦して、入力の種類ごとの動作を体感してみましょう。

hasNextLineとhasNextの違いはなんですか?どっちを使えばいいか迷います。

hasNextLineは次の行(Line)が存在するかどうかを確認するのに対し、hasNextは単語やトークン単位での入力の有無を確認します。入力の形式に応じて使い分けましょう。複数行を扱う場合はhasNextLineが適しています。
カテゴリの一覧へ
新着記事
Springの@Transactional徹底解説!トランザクションの伝播・分離レベル・タイムアウトの基本
JavaのHashMapクラスgetメソッドの使い方を完全ガイド!初心者でもわかるjava.util入門
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
人気記事
No.1
Java&Spring記事人気No1
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.2
Java&Spring記事人気No2
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.3
Java&Spring記事人気No3
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.4
Java&Spring記事人気No4
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.5
Java&Spring記事人気No5
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本