🪐

Java:Scannerで取り込んだ数字の列に半角スペース改行を施す

2022/07/03に公開

クラスScanner

Scannerの役割 Javaドキュメントより

Scannerは、区切り文字のパターンを使用して入力をトークンに分割します。デフォルトでは区切り文字は空白文字です。結果として得られるトークンは、さまざまなnextメソッドを使用して、異なる型の値に変換できます。たとえば、次のコードを使用して、System.inから数値を読み込むことができます。

入力ソースから数字を取り込む時のコード

     import java.util.*;
     
     Scanner sc = new Scanner(System.in);
     int i = sc.nextInt();

1行目:Scannerクラスを宣言
2行目:取り込んだ値をiに代入

半角スペースで取り込んだ数字を区切る

 String input = "2022 0703";
 Scanner sc = new Scanner(input).useDelimiter("\\s+");
 int a = sc.nextInt();
 int b = sc.nextInt();
 System.out.println(a);
 System.out.println(b);
 s.close();

実行結果は
2020
0703

となります。
2行目に .useDelimiter("\s+"); と書くことで、半角スペースの部分で数字を区切ることができます。

「入力」するところから値を取り込む場合は、

String input = "2022 0703";

は書かずに、

 Scanner sc = new Scanner(System.in).useDelimiter("\\s+");
 int a = sc.nextInt();
 int b = sc.nextInt();
 System.out.println(a);
 System.out.println(b);
 s.close();

というように書き、入力するところに 2020 0702 と入力します。

for文で短く記述する

次に、このコードをfor文を用いて短く記述してみましょう。
【入力欄から打ち込む場合】
入力 2022 0702

 Scanner sc = new Scanner(System.in).useDelimiter("\\s+");
 for (int i = 0; i < 2; i++) {
            int line = sc.nextInt();
            System.out.println(line);
        }
        sc.close();

2行目に2とあるが、この2という数字は数字の塊が「2022 0703」0702で2つだからです。

【フィールド上の数字の列を取り込む場合】

 String input = "2022 0703";
 Scanner sc = new Scanner(input).useDelimiter("\\s+");
 for (int i = 0; i < 2; i++) {
            int line = sc.nextInt();
            System.out.println(line);
        }
        sc.close();

参考

Javaの公式ドキュメント

Discussion