Java Matcherクラスのend()メソッドとは?サンプルコード付きで解説
java.util.regex.Matcher クラスは、正規表現によるさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Pattern クラスの matcher() メソッドを使用してオブジェクトを取得します。
Matcher クラスの end() メソッドは、現在の Matcher オブジェクトが保持している最後のマッチの終了位置(オフセット)を int 型で返します。つまり、マッチした部分文字列の最後の文字の「次の位置」を取得できます。
また、部分式 [...] は、角括弧内に指定した文字のいずれか1文字にマッチします。以下の例では、この表現を使って入力文字列中の文字 t を検索しています。
処理の流れ
- compile() メソッドを使って正規表現をコンパイルし、Pattern オブジェクトを作成する
- matcher() メソッドで Matcher オブジェクトを取得する
- find() メソッドでマッチを検索しながら、各マッチに対して end() メソッドを呼び出して終了位置を取得する
サンプルコード
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EndExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "[t]";
// パターンオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// コンパイル済みパターンを入力文字列に適用
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
int end = matcher.end();
System.out.println(end);
}
}
}
実行結果
Enter input text: Hello how are you welcome to Tutorialspoint 27 32 43
実行結果の解説
入力文字列「Hello how are you welcome to Tutorialspoint」には文字 t が3回含まれているため、3つのオフセット値(27、32、43)が出力されています。これらの数値は、それぞれの t が見つかった直後の位置(先頭を0とするインデックス)を表しています。
補足:end(int group) メソッド
end() メソッドには引数付きのオーバーロード版 end(int group) も存在します。こちらは、指定したキャプチャリンググループが最後にマッチした文字の次の位置を返します。グループ番号は1から始まり、マッチが失敗していた場合や無効なグループ番号を指定した場合は IllegalStateException や IndexOutOfBoundsException がスローされる点に注意してください。
-
Java Matcherクラスのfind()メソッドとは?使い方とサンプルコードで解説
java.util.regex.Matcherクラスは、正規表現によるさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを生成・取得します。 find()メソッドは、現在のMatcherオブジェクトに対して、入力シーケンスの中から次にパターンに一致する部分を検索します。マッチが見つかればtrueを返し、見つからなければfalseを返します。 find()メソッドの基本的な動作 呼び出されるたびに、前回マッチした位置の続きから次の一致箇所を検
-
JavaのMatcherクラスstart()メソッドとは?サンプルコード付きで解説
java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使用することで、Matcherオブジェクトを取得できます。 Matcherクラスのstart()メソッドは、直前にマッチした文字列の開始インデックス(先頭からの位置)をint型で返します。 start()メソッドの基本的な動作 正規表現における文字クラス「[...]」は、括弧内に指定したいずれか1文字に一致します。以下の例では、この文字クラ