JavaでのScannerクラスの使い方とは?Scannerクラスを正しく使いこなそう!

- システム
エンジニア - JavaのScannerクラスはどのようなときに使用するのでしょうか。
- プロジェクト
マネージャー - 指定した型の値を読み込むのにScannerクラスを使用します。
JavaでのScannerクラスの使い方とは?
今回は、JavaでのScannerクラスの使い方について説明します。
指定した型の値を読み込むのにScannerクラスを使用します。指定した型以外の値を読み込むと例外が発生しますので、例外処理を施してください。
ここでは、以下について紹介します。
・基本的な使い方
・複数回の入力
・ファイルからの入力
・Delimiterの変更
・Radixの変更
JavaでのScannerクラスの使い方に興味のある方はぜひご覧ください。
基本的な使い方
JavaでのScannerクラスの基本的な使い方を紹介します。Scannerクラスを使用するには、「import java.util.Scanner;」を記述します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.Scanner; public class Main { public static void main(String[] args) { // Scannerインスタンス作成(標準入力System.inから入力) Scanner scanner = new Scanner(System.in); System.out.print(""数字を入力してください : ""); // 入力された内容を取得 int i = scanner.nextInt(); // 入力された内容を画面表示 System.out.println(i + ""が入力されました""); // Scannerインスタンスをクローズ scanner.close(); } } |
実行結果は以下のようになります。
1 2 |
数字を入力してください : 3 3が入力されました |
数字を入力すると、画面に入力した数字が出力されることが分かります。このように、Javaでは指定した型の値を読み込むのにScannerクラスを使用します。
数値以外を入力すると、InputMismatchExceptionが発生します。try-catchで囲んでください。
1 2 3 4 5 6 7 |
数字を入力してください : Java Exception in thread ""main"" java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at Main.main(Main.java:11) |
複数回の入力
先ほどのサンプルについて、複数回入力するプログラムを紹介します。ここでは、型にdoubleを指定します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Scannerインスタンス作成(標準入力System.inから入力) Scanner scanner = new Scanner(System.in); double sum = 0; System.out.print(""小数を入力してください(0を入力すると終了) : ""); // 入力された内容を取得 double d = scanner.nextDouble(); while(d != 0.0) { sum += d; System.out.print(""小数を入力してください(0を入力すると終了) : ""); d = scanner.nextDouble(); } // 入力された内容を画面表示 System.out.println(""入力値の合計:"" + sum); // Scannerインスタンスをクローズ scanner.close(); |
実行結果は以下のようになります。
1 2 3 4 5 |
小数を入力してください(0を入力すると終了) : 1.2 小数を入力してください(0を入力すると終了) : 3.4 小数を入力してください(0を入力すると終了) : 1 小数を入力してください(0を入力すると終了) : 0 入力値の合計:5.6 |
このように、JavaのScannerクラスを利用して複数回入力することもできます。
ファイルからの入力
JavaのScannerクラスでは標準入力ではなく、ファイルから入力することもできます。
以下のようなファイルを入力とします。
1 2 3 4 5 6 7 8 9 10 |
1 2 3 4 5 6 7 8 9 10 |
実際のソースコードを見てみましょう。ファイルを扱うので「import java.io.File;」を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Scanner; import java.io.File; public class Main { public static void main(String[] args) throws Exception { // Scannerインスタンス作成 Scanner scanner = new Scanner(new File(""int.txt"")); // 次のintがあれば繰り返す while(scanner.hasNextInt()){ // 画面表示 System.out.println(scanner.nextInt()); } // Scannerインスタンスをクローズ scanner.close(); } } |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
1 2 3 4 5 6 7 8 9 10 |
ファイルの内容が出力されていることが分かります。このように、JavaのScannerクラスでは標準入力ではなく、ファイルから入力することもできます。
Delimiterの変更
ScannerクラスのDelimiterはデフォルトでは半角スペースになっています。
1 2 3 4 5 6 7 8 9 10 11 |
// Scannerインスタンス作成 Scanner scanner = new Scanner(""1 2 3 4 5""); // 次のintがあれば繰り返す while(scanner.hasNextInt()){ // 画面表示 System.out.println(scanner.nextInt()); } // Scannerインスタンスをクローズ scanner.close(); |
実行結果は以下のようになります。
1 2 3 4 5 |
1 2 3 4 5 |
ScannerクラスのDelimiterは変更できます。パイプ(|)で区切れば、複数のDelimiterを指定することもできます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Scannerインスタンス作成 Scanner scanner = new Scanner(""1,2-3,4-5""); // デリミタの変更 scanner.useDelimiter("",|-""); // デリミタの表示 System.out.println(""Delimiter : ""+scanner.delimiter()); // 次のintがあれば繰り返す while(scanner.hasNextInt()){ // 画面表示 System.out.println(scanner.nextInt()); } // Scannerインスタンスをクローズ scanner.close(); |
実行結果は以下のようになります。
1 2 3 4 5 6 |
Delimiter : ,|- 1 2 3 4 5 |
このように、JavaにおいてScannerクラスのDelimiterは変更できます。
Radixの変更
ScannerクラスのRadix(基数)はデフォルトでは10進数になっています。Radixは変更することができます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Scannerインスタンス作成 Scanner scanner = new Scanner(""9 A B C D E F 10""); // Radixの変更(16進数に変更) scanner.useRadix(16); // Radixの表示 System.out.println(""Radix:""+scanner.radix()); // 次のintがあれば繰り返す while(scanner.hasNextInt()){ // 画面表示 System.out.println(scanner.nextInt()); } // Scannerインスタンスをクローズ scanner.close(); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 |
Radix:16 9 10 11 12 13 14 15 16 |
このように、JavaにおいてScannerクラスのRadixは変更できます。
- システム
エンジニア - JavaでのScannerクラスの使い方がよく分かりました。
- プロジェクト
マネージャー - Scannerクラスの使い方をより理解するために、あえて指定した型以外の値を読み込んでみるのも良いでしょう。いろいろ試してみてください。
まとめ
いかがでしたでしょうか。JavaでのScannerクラスの使い方について説明しました。
指定した型の値を読み込むのにScannerクラスを使用します。指定した型以外の値を読み込むと例外が発生しますので、例外処理を施してください。DelimiterやRadix(基数)を変更することもできます。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)