【速習Java】Stringのcontainsで文字列を含むか知る方法

JavaのStringを扱う上で、文字列の中に特定の文字列が含まれているか、確認するためにはcontainsメソッドを使うと便利です。

この記事では、文字列から特定の文字列を検索するためのcontainsメソッドについて、以下の内容で解説していきます。

  • 【基礎】文字列検索でのcontainsの使い方
  • 【基礎】文字列の特定の一部を取得する方法
  • 【発展】containsとindexOfの処理速度の比較

containsメソッドについて、わかりやすく解説していますのでぜひ参考にしてください!

文字列検索でのcontainsの使い方

containsメソッドは、文字列に特定の要素が含まれているか確認します。

指定された文字列が含まれている場合に限り、trueを返します。

boolean contains("指定文字列")

以下にcontainsメソッドを使用したサンプルコードを記述します。

public class Main {
 
    public static void main(String[] args) {
        //Stringの宣言
        String str = "appleorangemelon";
        
        //指定した文字列が存在するか確認
        if (str.contains("orange"))
        {
            System.out.println("It contains oranges");
        }
    }

}

実行結果:

It contains oranges

このサンプルコードでは、String型を宣言して文字列”appleorangemelon”を格納しています。

次にcontainsメソッドを使用して、文字列の中に”orange”が含まれているか、確認しています。指定した文字列が含まれている場合、containsメソッドはtrueを返しますので、if文の処理が実行されます。

なお、containsメソッドはString型の変数を指定することもできます。

また、containsメソッドと同じように文字列の中に指定した文字列が含まれているか知る方法としてindexOfメソッドを使う場合があります。

indexOfメソッドは第1引数に文字列を指定し、その指定した文字列が最初に登場した位置をインデックス番号で返します。

第2引数で、検索開始位置を指定することもできます。指定した文字列がみつからない場合は-1を返します。containsメソッドとindexOfメソッドは戻り値が違いますので、必要に応じて使い分けるようにしましょう!

文字列の特定の一部を取得する方法

実際の実務では、文字列の中から特定の値が存在するか調べて、特定の文字列のみ取得したいといった状況となる場合もありえます。

特定の文字列のみ取得する場合の処理のサンプル(ここでは”orange”を取り出す)を、以下に記述します。

public class Main {
 
    public static void main(String[] args) {
        //Stringの宣言
        String str = "appleorangemelon";
        
        //指定した文字列が存在するか確認
        if (str.contains("orange"))
        {
            //indexOf
            int index = str.indexOf("orange");
            
            //substring
            String substr = str.substring(index, 11);
            System.out.println(substr);
        }
    }

}

実行結果:

orange

このサンプルコードでは、まずcontainsメソッドで指定した文字列が存在するか確認しています。

指定した文字列が存在したら、indexOfメソッドで指定した文字列が何番目のindexから始まるか調べています。

substringメソッドで文字列の一部分を取り出すために、開始インデックスと終了インデックスを指定して、取得したい文字列のみを取り出しています。

containsとindexOfの処理速度の比較

気になるcontainsメソッドのベンチマークはいかほどでしょうか?

containsメソッドの処理速度を、indexOfメソッドと比較してみました。ナノ秒単位で処理を比較するサンプルを以下に記述します。

public class Main {
 
    public static void main(String[] args) {
        String[] str = new String[100];
        
        for(int i=0; i<100; i++)
        {
            str[i] = "appleorangemelon";
        }
        
        // contains検索処理開始
        long start1 = System.nanoTime();
        for(int j=0; j<100; j++)
        {
            boolean b = str[j].contains("orange");
        }
        
        // contains処理終了時間
        long end1 = System.nanoTime();
        System.out.println("contains:" + (end1 - start1) / 1000000f + "ms");
        
        // indexOf検索処理開始
        long start2 = System.nanoTime();
        for(int k=0; k<100; k++)
        {
            int num = str[k].indexOf("orange");
        }
        // indexOf処理終了時間
        long end2 = System.nanoTime();
        System.out.println("indexOf:" + (end2 - start2) / 1000000f + "ms");
    }

}

実行結果:

contains:0.089792ms
indexOf:0.08806ms

このサンプルコードでは、String型の配列に100回値を設定しています。設定したString配列を元に、containsとindexOfでそれぞれ100回検索した場合の処理速度を比較しています。

実行結果から分かるとおり誤差はあるものの、どちらかが極端に早いというわけではありませんでした。

indexOfについてもっと詳しく知りたい方へ

ここまでcontainsメソッドの使い方について、indexOfメソッドと比較して説明してきました。

indexOfメソッドについて、こちらで詳しく解説していますので、ぜひ参考にしてくださいね。

【3分Java入門】Stringで文字列が含まれているか知る方法(indexOf)
更新日 : 2017年6月7日

Stringについてもっと詳しく知りたい方へ

Stringのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java String】7つの基本的な使い方で文字列操作を理解しよう
更新日 : 2019年5月7日

まとめ

ここでは、Stringの文字列の中から指定した文字列を検索するcontainsメソッドのさまざまな使用方法を説明しました。

Stringの文字列を検索するためのメソッドはいくつか存在しますが、それぞれ用途が異なります

そのため、各メソッドの役割はしっかりと覚えておく必要があるでしょう。

もし、containsメソッドの使用方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

侍テック編集部

侍テック編集部