Javaでキーボードやファイルから入力をするときには、Scannerクラスを使う。
このときに、区切りの文字を変えてインポートしたいということはよくある。例えば、csvファイルを一括で読み込みたいときなどだ。
このページでは、区切り文字を変更する方法についてお伝えしよう。
Scannerクラスの区切り文字
デフォルトは空白区切り
Scannerクラスでは読み取るときに区切り文字を指定することができる。
以下のプログラムを実行してみるとわかるが、デフォルトでは空白と改行で区切るようになっている。
1 2 3 4 5 6 7 8 9 10 11 |
import java.util.Scanner; class sampleA { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.println("何か入力してください。"); String string = scanner.next(); System.out.println("入力した文字列は " + string + " です。"); string = scanner.next(); System.out.println("入力した文字列は " + string + " です。"); } } |
sampleAクラスを実行して、「あいうえお かきくけこ」と入力して、改行した場合の実行結果は以下のようになる。
1 2 3 4 |
何か入力してください。 あいうえお かきくけこ 入力した文字列は あいうえお です。 入力した文字列は かきくけこ です。 |
この実行結果から区切り文字がデフォルトでは空白と改行になっていることがわかる。
もちろん、Scannerクラスではこの区切り文字を自由に変更することができる。
区切り文字の変更
区切り文字を指定した以下のプログラムをみていこう。区切り文字には「,」と改行を指定するようにした。「,」で区切ることはCSVファイルなどでよく使われるので是非覚えておきたい。
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.util.Scanner; class sampleB { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); scanner.useDelimiter(",|¥n"); //・・・① System.out.println("何か入力してください。"); String string = scanner.next(); System.out.println("入力した文字列は " + string + " です。"); string = scanner.next(); System.out.println("入力した文字列は " + string + " です。"); } } |
区切り文字を指定するのは簡単だ。①のように Scannerクラスの「useDelimiter」メソッドを使い、区切り文字を指定するだけだ。 useDelimiterメソッドの使い方は簡単だが、指定する文字列については少し複雑だ。
一文字だけを指定する場合は単純に区切りたい文字を指定するだけなので、例えば「,」とだけ指定すればよいが、複数の文字を指定したい場合などは正規表現で書かなければならない。
正規表現は他にも色々な書き方があり、例えば「[a-z]」と書けばそれだけでaからzまでの文字を表していて、「[a-z]」を区切り文字に指定すればaからzの文字のどれを入力されても区切り文字として実行できる。
正規表現はプログラムではよく使う文字列マッチングの表記方法なので時間があるときに是非覚えたい。
今回区切り文字に指定したのは「,|¥n」で、この一文で「,」または改行を意味している。正規表現で「|」は、「〜または〜」の場合に使う。「¥n」は改行を意味する。
scanner.useDelimiter(",|¥n");
sampleBクラスを実行して、「あいうえお,かきくけこ」と入力して、改行した場合の実行結果は以下のようになる。
1 2 3 4 |
何か入力してください。 あいうえお,かきくけこ 入力した文字列は あいうえお です。 入力した文字列は かきくけこ です。 |
まとめ
このページでは、Scannerクラスでテキストなどのデータを読み込むときの区切り文字変更方法についてお伝えした。
CSVの読み込みなど、既存データのインポートなどに役立てていただければと思う。