MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. Java Scanner完全ガイド|標準入力・ファイル読込・落とし穴まで徹底解説

Java Scanner完全ガイド|標準入力・ファイル読込・落とし穴まで徹底解説

Javaの標準入力とScannerの全体像

Javaで「入力処理」を扱うとき、

最初に理解すべきなのが標準入力とScannerの関係です。

標準入力とは?

標準入力とは、プログラムが外部からデータを受け取る仕組みです。

  • キーボード入力(最も基本)
  • ファイル入力
  • 他プログラムからの入力

👉 Scannerはこの入力を扱いやすくするクラスです

Scannerの役割

Scannerは、入力を安全かつ簡単に扱うためのツールです。

  • 文字列・数値を自動変換
  • 1行・単語単位で取得可能
  • 入力エラーを制御できる

👉 初心者が最初に学ぶ理由がここにあります

この記事で身につくスキル

この記事を読むことで、以下ができるようになります。

  • 標準入力を使ったプログラム作成
  • 数値・文字列の安全な入力処理
  • 入力エラーの防止方法
  • ファイル読み込みの基本実装

👉 「動くプログラムを自分で書ける」状態がゴールです

👉 すぐに試したい方へ

ZeroCodePLUSなら環境構築なしでJavaを実行できます。

学びながらその場でコードを動かせます。

Java Scannerとは?入力処理の基本概念

Scannerが「初心者向け」と言われる理由

Javaで入力処理を学ぶとき、最初に登場するのがScannerです。

特徴

  • 型変換を自動で行う
  • メソッド名が直感的
  • 少ないコードで扱える

👉 学習用・実務どちらでも使われます

トークン分割という考え方

Scannerの本質は「入力の分割」です。

  • 入力はトークン単位で管理される
  • 空白・改行で区切られる
  • next系メソッドで取得

👉 この理解がバグ回避の鍵です

Scannerを使う準備と基本の書き方

importとインスタンス生成

Scannerはjava.utilパッケージに含まれます。

import java.util.Scanner;

標準入力の場合は以下のように生成します。

Scanner sc = new Scanner(System.in);

Scannerは入力元を包むラッパーです。

どこから入力を受け取るかをコンストラクタで指定します。

※インスタンスとは?についてはこちら

Scannerを1つにまとめる設計の重要性

NG例

  • Scannerを複数作る
  • 入力位置がズレる

正解

  • 1入力元につき1Scanner

👉 実務では非常に重要です

標準入力(キーボード入力)の基本

next / nextLine の違い

Scannerで最も重要なのがこの2つです。

メソッド 読み取る範囲
next() 次のトークン(空白まで)
nextLine() 行全体(改行まで)

空白を含む入力を扱うなら、nextLine()が基本です。

入力待ちの仕組みとUI設計

Scannerの読み取りは、ユーザーがEnterを押すまで待機します。

止まって見えるときは、入力待ちである可能性が高いです。

System.out.print("名前を入力してください");
String name = sc.nextLine();

このようにプロンプトを表示すると、操作ミスが減ります。

数値・真偽値の読み取りと安全な入力チェック

nextInt / nextDouble の注意点

int age = sc.nextInt();

便利ですが、文字が入力されると即例外になります。

安全に書くなら、必ず事前チェックを行います。

if (sc.hasNextInt()) {
 int age = sc.nextInt();
} else {
 System.out.println("整数を入力してください");
 sc.next(); //不正トークンを捨てる
}

hasNext系メソッドで壊れない入力処理

Scannerには以下の判定メソッドがあります。

  • hasNextInt()
  • hasNextDouble()
  • hasNextLine()

例外に頼らず制御できるため、対話式プログラムでは必須です。

例外処理と入力エラー対策

InputMismatchExceptionの正体

  • 型が違うと発生
  • 不正データは残る

👉 無限ループの原因になります

無限ループを防ぐ設計

必ず以下のどちらかを行います。

  • next()で不正トークンを捨てる
  • nextLine()で行ごと捨てる

入力エラー時の回復設計が、プログラムの安定性を決めます。

※例外処理についてはこちらの記事もご参考ください

Scannerのリソース管理とcloseの考え方

close()が必要な理由

Scannerは内部でリソースを保持します。

  • ファイルハンドル
  • ストリーム

閉じ忘れると、リソース枯渇の原因になります。

try-with-resourcesの実践

try (Scanner sc = new Scanner(new File("data.txt"))) {
 while (sc.hasNextLine()) {
  System.out.println(sc.nextLine());
 }
}

例外が起きても自動でcloseされるため、安全です。

よくある落とし穴:nextIntの後にnextLineが空になる

原因(改行の読み残し)

  • nextInt()は数値のみ消費
  • 改行は残る
  • 次のnextLine()が空文字を読む

正しい解決方法

方法①:ダミーで改行を消費

int age = sc.nextInt();
sc.nextLine(); //改行を捨てる
String name = sc.nextLine();

方法②:nextLineに統一(推奨)

int age = Integer.parseInt(sc.nextLine());

ファイル読み込みにScannerを使う

ファイル入力の基本コード

try (Scanner sc = new Scanner(new File("users.txt"))) {
 while (sc.hasNextLine()) {
  String line = sc.nextLine();
  System.out.println(line);
 }
}

CSVや区切り文字の扱い方

sc.useDelimiter(",");

ただし、厳密なCSV処理には不向きです。

実務では専用ライブラリも検討します。

実務で使えるScanner実践コード例

標準入力の実践例

Scanner sc = new Scanner(System.in);
int age;
 while (true) {
  System.out.print("年齢を入力してください: ");
  if (sc.hasNextInt()) {
   age = sc.nextInt();
   sc.nextLine();
   break;
  }
  sc.next();
 }

System.out.print("名前を入力してください: ");
String name = sc.nextLine();

System.out.println(name + "さんは" + age + "歳です");

ファイル入力の実践例

try (Scanner sc = new Scanner(new File("users.csv"))){
 while (sc.hasNextLine()){
  String[] data = sc.nextLine().split(",");
  System.out.println(data[0] + ":" + data[1]);
 }
}

独学でつまずいている方へ

よくある悩みです。

  • 入力処理でエラーが出る
  • 理解はしたが書けない
  • 実務の書き方が分からない

👉 これは正常な成長過程です

ZeroCodePLUSで学習効率を上げる

  • 環境構築不要
  • ブラウザで即実行
  • 実務ベースで学べる

👉 「理解→実践」を高速化

まとめ|ScannerはJava入力処理の基礎

重要ポイントです。

  • Scannerは入力処理の基礎
  • トークン理解が重要
  • hasNextで安全設計

👉 ここを押さえれば実務でも通用します

次のステップ

次にやるべきことです。

  • 入力処理を自分で書く
  • エラーを再現して理解
  • ファイル処理に応用

👉 ZeroCodePLUSなら

「書く→動かす→理解」がすぐできます

まずは実際に手を動かしてみましょう!

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る