JavaのStringを扱う上で、文字列の中に特定の文字列が含まれているか、確認するためにはcontainsメソッドを使うと便利です。
この記事では、文字列から特定の文字列を検索するためのcontainsメソッドについて、以下の内容で解説していきます。
- 【基礎】文字列検索でのcontainsの使い方
- 【基礎】文字列の特定の一部を取得する方法
- 【発展】containsとindexOfの処理速度の比較
containsメソッドについて、わかりやすく解説していますのでぜひ参考にしてください!
なお、Javaの記事については、こちらにまとめています。
文字列検索での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メソッドについて、こちらで詳しく解説していますので、ぜひ参考にしてくださいね。
Stringについてもっと詳しく知りたい方へ
Stringのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
ここでは、Stringの文字列の中から指定した文字列を検索するcontainsメソッドのさまざまな使用方法を説明しました。
Stringの文字列を検索するためのメソッドはいくつか存在しますが、それぞれ用途が異なります。
そのため、各メソッドの役割はしっかりと覚えておく必要があるでしょう。
もし、containsメソッドの使用方法を忘れてしまったら、この記事を思い出してくださいね!