JavaのMatchResultインターフェースstart()メソッドの使い方をサンプルコードで解説
java.util.regex.MatchResult インターフェースは、正規表現によるマッチングの結果を取得するためのメソッドを提供します。
このインターフェースのオブジェクトは、Matcher クラスの toMatchResult() メソッドを使って取得できます。このメソッドは、現在のマッチャーのマッチ状態を表す MatchResult オブジェクトを返します。
そして、このインターフェースが持つ start() メソッドは、現在のマッチが開始された位置(開始インデックス) を int 型の値として返します。
start()メソッドの基本的な動作
正規表現パターンが入力文字列内でマッチした場合、そのマッチした部分文字列が始まるインデックス番号(0から始まる)を取得できます。マッチがまだ実行されていない状態や失敗した状態で呼び出すと IllegalStateException がスローされるため、必ず find() や matches() の後に呼び出すようにしましょう。
サンプルプログラム
以下の例では、ユーザーから入力された文字列に対して単語以外の文字(\W)に一致するかどうかを判定し、マッチした場合はその開始位置を出力します。
import java.util.Scanner;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StartExample {
public static void main(String args[]) {
// ユーザーから文字列を入力してもらう
System.out.println("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String regex = "\\W";
// 正規表現をコンパイルしてPatternオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println("マッチしました");
} else {
System.out.println("マッチしませんでした");
}
// MatchResultオブジェクトを取得
MatchResult res = matcher.toMatchResult();
// マッチの開始インデックスを取得して表示
int start = res.start();
System.out.println(start);
}
}
実行結果
文字列を入力してください This * is # sample % text with & non word characters マッチしました 4
この実行例では、入力文字列の中で最初に単語以外の文字「*」が現れるのはインデックス4の位置であるため、start() メソッドは 4 を返しています。
まとめ
MatchResult インターフェースの start() メソッドを使うことで、正規表現にマッチした部分の開始位置を簡単に取得できます。類似のメソッドとして、マッチの終了位置を返す end() や、マッチした文字列自体を取得できる group() も併せて覚えておくと便利です。
-
例で学ぶJava Matcherクラスのpattern()メソッド
java.util.regex.Matcher クラスは、正規表現による各種マッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されていないため、java.util.regex.Pattern クラスの matcher() メソッドを使用してオブジェクトを生成・取得します。 pattern() メソッドは、現在の Matcher が解釈に使用している Pattern オブジェクトを取得して返します。引数は不要で、戻り値は java.util.regex.Pattern 型です。「実際にどの正規表現で照合を行ったのか」を後から確認したい場合などに便利なメソッドです。
-
JavaのMatcherクラスstart()メソッドとは?サンプルコード付きで解説
java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使用することで、Matcherオブジェクトを取得できます。 Matcherクラスのstart()メソッドは、直前にマッチした文字列の開始インデックス(先頭からの位置)をint型で返します。 start()メソッドの基本的な動作 正規表現における文字クラス「[...]」は、括弧内に指定したいずれか1文字に一致します。以下の例では、この文字クラ