Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】文字列から特定の単語を検索する3つの方法|contains()・indexOf()・StringTokenizerの使い方

Javaには、文字列の中から特定の単語を検索・解析するためのさまざまな手法が用意されています。この記事では、特によく使われる以下の3つの方法を、サンプルコードと実行結果とあわせてわかりやすく解説します。

  • contains()メソッド … 単語が含まれているかどうかを判定
  • indexOf()メソッド … 単語が出現する位置(インデックス)を取得
  • StringTokenizerクラス … 文字列を単語に分割し、完全一致で比較

1. contains()メソッド

Stringクラスのcontains()メソッドは、引数として渡した文字シーケンス(CharSequence)が現在の文字列内に含まれているかどうかを確認します。含まれていればtrue、含まれていなければfalseを返します。「特定の単語が存在するかどうか」を手軽に調べたい場合に最もシンプルな方法です。

サンプルコード

public class ParsingForSpecificWord {
    public static void main(String args[]) {
        String str1 = "Hello how are you, welcome to Tutorialspoint";
        String str2 = "Tutorialspoint";
        if (str1.contains(str2)) {
            System.out.println("Search successful");
        } else {
            System.out.println("Search not successful");
        }
    }
}

実行結果

Search successful

2. indexOf()メソッド

StringクラスのindexOf()メソッドは、引数で渡した文字列が現在の文字列内で最初に出現する位置(インデックス)を返します。見つからなかった場合は-1を返します。単語の有無だけでなく、どこに存在するのかという位置情報も必要な場合に便利です。

なお、判定条件は「index > 0」ではなく「index >= 0」とするのが安全です。検索対象の単語が文字列の先頭(インデックス0)にあった場合でも正しく検出できるためです。

サンプルコード

public class ParsingForSpecificWord {
    public static void main(String args[]) {
        String str1 = "Hello how are you, welcome to Tutorialspoint";
        String str2 = "Tutorialspoint";
        int index = str1.indexOf(str2);
        if (index >= 0) {
            System.out.println("Search successful");
            System.out.println("Index of the word is: " + index);
        } else {
            System.out.println("Search not successful");
        }
    }
}

実行結果

Search successful
Index of the word is: 30

3. StringTokenizerクラス

java.utilパッケージのStringTokenizerクラスを使うと、区切り文字(デリミタ)を指定して文字列を小さなトークン(単語)に分割し、先頭から順に処理できます。次の例では、元の文字列を半角スペースでトークン化し、equals()メソッドで各トークンと検索対象の単語を比較することで、完全に一致する単語が存在するかどうかを確認しています。

サンプルコード

import java.util.StringTokenizer;

public class ParsingForSpecificWord {
    public static void main(String args[]) {
        String str1 = "Hello how are you welcome to Tutorialspoint";
        String str2 = "Tutorialspoint";

        // StringTokenizerのインスタンスを生成(区切り文字は半角スペース)
        StringTokenizer tokenizer = new StringTokenizer(str1, " ");

        boolean found = false;
        while (tokenizer.hasMoreTokens()) {
            String token = tokenizer.nextToken();
            if (token.equals(str2)) {
                found = true;
                break;
            }
        }

        if (found) {
            System.out.println("Search successful");
        } else {
            System.out.println("Search not successful");
        }
    }
}

実行結果

Search successful

3つの方法の使い分けまとめ

方法特徴向いているケース
contains()部分一致の判定(true / false)含まれているかどうかだけ確認したい場合
indexOf()出現位置(インデックス)を取得位置情報も必要な場合
StringTokenizer区切り文字で分割し、単語単位で比較完全一致する単語を厳密に判定したい場合

contains()やindexOf()は部分一致での検索となるため、たとえば「Tutorialspoints」のような類似した文字列にもマッチしてしまう点に注意が必要です。単語として厳密に一致するかを判定したい場合は、StringTokenizerのほかに、split()メソッドやStream APIを組み合わせる方法も有用です。用途に応じて最適な手法を選びましょう。

  1. Pythonで文字列をスキャンして特定の文字を探す方法

    in演算子で特定の文字が含まれているか確認するPythonで、ある文字が文字列の中に存在するかどうかを調べたいときは、in 演算子を使うのが最もシンプルで読みやすい方法です。式は True または False を返します。>>> s = Hello world >>> e in s True複数の文字をまとめて検索する(set + any)検索したい文字が1つではなく複数ある場合は、セット(set)を活用すると効率的です。候補となる文字をあらかじめセットに登録しておき、any() 関数と組み合わせることで、「文字列中にこれらの文字が1つでも含まれているか」を

  2. Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説

    Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare