スライドショー

【速習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

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説