様々なクラス⑤:Scannerクラス

指定した型の値を読み込む方法を解説します。split()メソッドとScannerクラスの使い方を確認します。

クラス 1 2 3 4 5 6 7

様々なクラス⑤:Scannerクラス

Stringクラスのsplit()

split()メソッドとは

Stringクラスには、引数に指定した区切り文字で文字列を分割し、配列として返すsplit()メソッドがあります。

split()メソッドの書式
String[] 配列名 = 文字列.split("区切り文字");
SampleClass01.java
package class5;

public class SampleClass01 {
    public static void main(String[] args) {
        String str1 = "one,two,three";
        String str2 = "apple orange pineapple";
        String[] strarray1 = str1.split(",");
        String[] strarray2 = str2.split(" ");

        for(String s : strarray1){
            System.out.println(s);
        }
        System.out.println();
        for(String s : strarray2){
            System.out.println(s);
        }
    }
}
one
two
three

apple
orange
pineapple

Scannerクラス

Scannerクラスとは

Scannerクラス(java.utilパッケージ)は、区切り文字のパターンを使って文字列をトークン(単語)に分割して扱うクラスです。デフォルトの区切り文字は空白ですが、useDelimiter()で変更できます。

用途記述例
文字列の読み込みnew Scanner(文字列)
キーボード入力new Scanner(System.in)
ファイル読み込みnew Scanner(new FileReader("ファイル名"))
区切り文字の設定useDelimiter("区切り文字")
トークンの有無確認hasNext()
トークンの取得next()
SampleClass02.java
package class5;
import java.util.*;

public class SampleClass02 {
    public static void main(String[] args) {
        String str1 = "one,two,three";
        String str2 = "apple orange pineapple";
        Scanner sc1 = new Scanner(str1);
        sc1.useDelimiter(",");

        while(sc1.hasNext()){
            System.out.println(sc1.next());
        }
        System.out.println();

        Scanner sc2 = new Scanner(str2);
        while(sc2.hasNext()){
            System.out.println(sc2.next());
        }
        sc1.close();
        sc2.close();
    }
}
one
two
three

apple
orange
pineapple

SampleClass01と同じ結果が得られます。sc1はカンマ区切り、sc2はデフォルト(空白区切り)でトークン分割しています。

コンソールからの入力

System.inからの入力

ScannerにSystem.inを渡すと、キーボード入力を読み込めます。

SampleClass03.java
package class5;
import java.util.*;

public class SampleClass03 {
    public static void main(String[] args) {
        System.out.print("Input Data:");
        Scanner scan = new Scanner(System.in);
        int i = 1;

        while(scan.hasNext()){
            String str = scan.next();
            System.out.println(i + " : "+ str);
            i++;
        }
    }
}
Input Data:one two three four
1 : one
2 : two
3 : three
4 : four

ファイルの読み込み

CSVファイルの読み込み

ScannerにBufferedReaderとFileReaderを組み合わせると、CSVファイルなどの読み込みをより簡単に行えます。

SampleClass04.java
package class5;
import java.io.*;
import java.util.*;

public class SampleClass04 {
    public static void main(String[] args) {
        Scanner sc = null;
        try{
            sc = new Scanner(new BufferedReader(new FileReader("csvsample.csv")));
            sc.useDelimiter(",");

            while(sc.hasNext()){
                System.out.print(sc.next() + " ");
            }
        }catch(FileNotFoundException e){
            System.out.println("ファイルが見つかりません。");
        }finally{
            if(sc != null){
                sc.close();
            }
        }
    }
}
1 2 3
4 5 6
7 8 9

CSVファイルのカンマ区切りのデータをトークンとして順に読み出して表示します。