単語の複数回出現の検索
indexOf() を使用して単語の単一の出現を検索する基本を理解したので、文字列内の単語のすべての出現を検索する方法を学び、スキルを向上させましょう。
2 番目の indexOf() メソッドのシグネチャの理解
indexOf() メソッドには、もう 1 つの便利な形式があります。
int indexOf(String str, int fromIndex)
このバージョンでは、検索の開始位置を指定できます。この形式を使用することにより、各新しい検索を中断した場所から開始して、単語のすべての出現を検索できます。
複数検索プログラムの作成
特定の単語のすべての出現を検索する新しい Java プログラムを作成しましょう。
MultipleFinder.java という名前の新しいファイルを作成します。
- 次のコードを入力します。
public class MultipleFinder {
public static void main(String[] args) {
// 単語が複数回出現するサンプルテキストを作成します
String paragraph = "Java is a popular programming language. Java runs on various platforms. " +
"Java is used for developing web applications, mobile apps, and more. " +
"Learning Java is essential for many software development roles.";
System.out.println("Original text:");
System.out.println(paragraph);
System.out.println("\nSearching for all occurrences of 'Java':");
// "Java" のすべての出現を検索します
String searchWord = "Java";
int position = 0;
int count = 0;
// それ以上の出現が見つからなくなるまでループします
while (position != -1) {
position = paragraph.indexOf(searchWord, position);
if (position != -1) {
count++;
System.out.println("Occurrence " + count + " found at position: " + position);
// 次の出現を見つけるために、この出現を過ぎて移動します
position += searchWord.length();
}
}
System.out.println("\nTotal occurrences found: " + count);
}
}
複数検索プログラムのコンパイルと実行
それでは、新しいプログラムをコンパイルして実行しましょう。
- ターミナルで、Java ファイルをコンパイルします。
javac MultipleFinder.java
- コンパイルされたプログラムを実行します。
java MultipleFinder
次のような出力が表示されるはずです。
Original text:
Java is a popular programming language. Java runs on various platforms. Java is used for developing web applications, mobile apps, and more. Learning Java is essential for many software development roles.
Searching for all occurrences of 'Java':
Occurrence 1 found at position: 0
Occurrence 2 found at position: 42
Occurrence 3 found at position: 72
Occurrence 4 found at position: 149
Total occurrences found: 4
プログラムの仕組み
このプログラムがすべての出現をどのように見つけるかを詳しく見てみましょう。
- 最初の検索位置を 0 (文字列の先頭) に設定します。
indexOf() が -1 (一致がなくなる) を返すまで続く while ループに入ります。
- 各一致について、次のことを行います。
- 単語が見つかった位置を出力します。
- 検索語の長さを加算して、現在の検索語の後に開始するように検索位置を更新します。
- 一致が見つからなくなるまで、ループは続行されます。
- 最後に、見つかった出現の総数を出力します。
大文字と小文字の区別を処理する
indexOf() メソッドは、デフォルトで大文字と小文字を区別します。テキストと検索語の両方を小文字に変換して、大文字と小文字を区別しない検索を実行するようにプログラムを変更しましょう。
MultipleFinder.java に、main メソッドの開始直後にこれらの行を追加します。
// 大文字と小文字を区別しない検索のデモンストレーション
System.out.println("\n--- Case-insensitive search ---");
String lowercaseParagraph = paragraph.toLowerCase();
String lowercaseSearchWord = searchWord.toLowerCase();
position = 0;
count = 0;
while (position != -1) {
position = lowercaseParagraph.indexOf(lowercaseSearchWord, position);
if (position != -1) {
count++;
System.out.println("Occurrence " + count + " found at position: " + position);
position += lowercaseSearchWord.length();
}
}
System.out.println("\nTotal occurrences found (case-insensitive): " + count);
更新されたプログラムをコンパイルして実行します。
javac MultipleFinder.java
java MultipleFinder
出力には、大文字と小文字を区別する検索結果と、大文字と小文字を区別しない検索結果の両方が含まれるようになります。