区切り文字を別の値に設定する

Scanner クラスでは next メソッドなどを実行したときに区切り文字までの値を入力ストリームから取得します。この区切り文字はデフォルトで半角スペースや改行などの空白文字となっていますが、文字列や正規表現パターンを使って区切り文字を別の値に変更することができます。ここでは Java のスキャナで区切り文字を別の値に設定する方法について解説します。

(Last modified: )

区切り文字として文字列を設定する

デフォルトでは区切り文字として空白文字が設定されています。別の文字列を設定するには Scanner クラスで用意されている useDelimiter メソッドを使用します。書式は次のとおりです。

public Scanner useDelimiter(String pattern)

パラメータ:
pattern - 区切り文字パターンを指定する文字列

戻り値:
現在のスキャナ

1 番目の引数に区切り文字として使用する文字列を指定します。

次のサンプルを見てください。

import java.util.Scanner;

class JSample3_1{
  public static void main(String[] args){
    Scanner scanner = new Scanner("Apple,Orange,Lemon");
    scanner.useDelimiter(",");

    while (scanner.hasNext()){
      String fruit = scanner.next();
      System.out.println(fruit);
    }
  }
}

入力ストリームとして文字列を指定してスキャナを作成しています。そのあと区切り文字をコンマ(,)に変更しました。そして区切り文字までの文字列を順番に取得して画面に表示しました。

区切り文字として文字列を設定する(1)

このように区切り文字をデフォルトの空白文字から任意の文字列に変更することができます。

区切り文字として正規表現パターンを設定する

変更する区切り文字として文字列ではなく正規表現パターンを指定することもできます。先ほどとは引数が異なる Scanner クラスで用意されている useDelimiter メソッドを使用します。書式は次のとおりです。

public Scanner useDelimiter(Pattern pattern)

パラメータ:
pattern - 区切り文字パターン

戻り値:
現在のスキャナ

1 番目の引数に、区切り文字として使用する Pattern オブジェクトを指定します。 Pattern オブジェクトの作成については「PatternオブジェクトとMatcherオブジェクトを作成する」を参照されてください。

次のサンプルを見てください。

import java.util.Scanner;
import java.util.regex.Pattern;

class JSample3_2{
  public static void main(String[] args){
    String regex = ":|;";
    var p = Pattern.compile(regex);

    Scanner scanner = new Scanner("Melon:Peach;Grapes:Orange");
    scanner.useDelimiter(p);

    while (scanner.hasNext()){
      String fruit = scanner.next();
      System.out.println(fruit);
    }
  }
}

入力ストリームとして文字列を指定してスキャナを作成しています。そのあと区切り文字を正規表現パターンを使って ":|;" に変更しました。これはコロン(:)またはセミコロン(;)のどちらかにマッチするパターンです。そして区切り文字までの文字列を順番に取得して画面に表示しました。

区切り文字として正規表現パターンを設定する(1)

このように区切り文字をデフォルトの空白文字から正規表現パターンを使ったものに変更することができます。

-- --

Java のスキャナで区切り文字を別の値に設定する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。