Regex によるパターンマッチング
CoddyのJavaジャーニー「ロジックとフロー」セクションの一部 — レッスン 47/59。
Pattern クラスと Matcher クラスは、Java での regex 操作に強力なツールを提供します。まず、それらを使用する方法を理解しましょう:
Pattern.compile() を使用して pattern を作成:
Pattern pattern = Pattern.compile("cat");
// Creates a pattern to find "cat"テキスト用の matcher を作成:
String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Creates a matcher for the textこれで matcher.find() を使用してマッチを見つけることができます:
while (matcher.find()) {
System.out.println("Found at: " + matcher.start());
}上記のコードを実行した後、出力は:Found at: 4
メソッドの理解:
<b>matcher.find()</b>- テキスト内でパターンの次の出現を検索します- マッチが見つかれば
trueを返します - これ以上マッチが存在しない場合
falseを返します - これが
whileループで使用する理由です - すべての出現を見つけるためです
- マッチが見つかれば
<b>matcher.start()</b>-find()が見つけた最後のマッチの開始インデックス(位置)を返します- 例では、"The cat and dog" 内で "cat" がインデックス 4 から始まります
- 成功した
find()の後に呼び出す必要があります
複数のマッチを含む例:
Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");
while (matcher.find()) {
System.out.println("Found at: " + matcher.start());
}
// Output:
// Found at: 0
// Found at: 8チャレンジ
簡単findWords という名前のメソッドを作成し、2つの引数を受け取る:
- 検索対象の String (
text) - 検索する String (
word)
このメソッドは以下を行う:
- Pattern と Matcher を使用して単語のすべての出現位置を検索する
- 単語が見つかった位置を含む文字列を返す
- 位置はスペースで区切る
戻り値のメッセージは以下:
- 入力が null の場合: "Invalid input" を返す
- 単語が見つからない場合: "Not found" を返す
- 見つかった場合:位置を返す(例:"4 10 15")
チートシート
Pattern と Matcher クラスは、Java での正規表現操作に強力なツールを提供します。
Pattern.compile() を使用して pattern を作成します:
Pattern pattern = Pattern.compile("cat");
// 「cat」を検索するためのパターンを生成しますテキストに対して matcher を作成します:
String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// テキスト用のマッチャーを生成しますmatcher.find() を使用してマッチを見つけます:
while (matcher.find()) {
System.out.println("Found at: " + matcher.start());
}主要なメソッド:
<b>matcher.find()</b>- パターンの次の出現を検索します- 見つかった場合は
trueを返し、これ以上マッチがない場合はfalseを返します - すべての出現を見つけるためにループで使用します
- 見つかった場合は
<b>matcher.start()</b>- 最後に見つかったマッチの開始インデックスを返します- 成功した
find()の後に呼び出します
- 成功した
自分で試してみよう
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static String findWords(String text, String word) {
// ここにコードを記述してください
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
String word = scanner.nextLine();
if (text.equals("null")) text = null;
if (word.equals("null")) word = null;
System.out.println(findWords(text, word));
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。