Javaにおける文字列の検索方法とは?Javaのメソッドをご紹介

- システム
エンジニア - 文字列の検索はJavaでもできるのでしょうか?
- プロジェクト
マネージャー - とても素朴な疑問ですが、できますよ。では詳しくみていきましょう。
文字列の検索を行うJavaのメソッド
文字列の中に特定の単語が含まれているかを調べたいことがあります。この記事では、JavaのStringクラスの以下のメソッドを使い、文字列中の部分文字列を検索する方法を説明します。
・contains
・indexOf
・lastIndexOf
文字列を含んでいるかを調べるcontains
文字列中に、指定された部分文字列を含んでいるかを調べたいときには、containsを使います。ここからは、containsの使い方を解説していきます。
containsの使い方
JavaのStringクラスのメソッドcontainsは次の形式です。
・boolean contains(CharSequence s)
引数の文字列を含んでいる場合に、trueを返す
ここで引数の型はCharSequenceとなっていますが、Javaの仕様では、StringはCharSequenceインタフェースを実装しているクラスなので、引数にString型の変数を渡してよいです。
containsを使ったコード例
containsを用いたJavaプログラムの例を示します。このプログラムでは、コマンドライン引数で調べたい文字列を指定できます。指定がないときは、デフォルト指定のappleboycatdogという文字列内にboyが部分文字列として含まれているかを調べます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class StrContains { public static void main(String[] args) { // 検索処理の対象文字列 String string = ""appleboycatdog""; // 検索したい文字列 String pattern = ""boy""; // コマンドラインに文字列指定がある場合 if (args.length > 0) pattern = args[0]; if (args.length > 1) string = args[1]; // 検索処理対象の文字列を出力 System.out.println(string); // patternが含まれているか調べる if (string.contains(pattern)) { System.out.println(pattern + "" が含まれている""); } else { System.out.println(pattern + "" が含まれていない""); } } } |
containsを使ったプログラムの実行例
上のJavaプログラムの実行結果の例を示します。他にも好きな文字列をコマンドラインで指定して、色々なパターンを試してみて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ java strContains appleboycatdog boy が含まれている $ java strContains cat appleboycatdog cat が含まれている $ java strContains bat appleboycatdog bat が含まれていない $ java strContains bat applybatcat applybatcat bat が含まれている |
文字列内の位置もわかるindexOfとlastIndexOf
文字列内に含まれる部分文字列を検索する際、文字列内の位置も知りたい場合には、indexOfやlastIndexOfを使用します。
indexOfとlastIndexOfの使い方
JavaのStringクラスのメソッドindexOfとlastIndexOfは次の形式です。いずれの形式でも、部分文字列が出現しない場合は-1を返します。
・int indexOf(String str)
指定された部分文字列が最初に出現する位置のインデックスを返す
・int indexOf(String str, int fromIndex)
fromIndex以降で、指定された部分文字列が最初に出現する位置のインデックスを返す
・int lastIndexOf(String str)
指定された部分文字列が最後に出現する位置のインデックスを返す
・int lastIndexOf(String str, int fromIndex)
指定された部分文字列が最後に出現する位置のインデックスを返す(fromIndexから先頭方向に検索)
indexOfとlastIndexOfでは文字列の検索方向が異なるので、探したい文字列が複数回出現する場合には、異なるインデックスが得られます。
indexOf/lastIndexOfを使ったコード例
indexOf、lastIndexOfを用いたJavaプログラムの例を示します。前のプログラムと同様に、コマンドライン引数で調べたい文字列を指定できます。先頭から、最後から、またインデックス10以降の文字列で先頭または最後からの検索を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
public class StrIndex { public static void main(String[] args) { // 検索処理対象string=args[1]、 // 検索パターンpattern=args[0]を設定 // …(コード省略)… int index; // patternの出現位置 // indexOf:最初の出現位置 index = string.indexOf(pattern); if (index == -1) { System.out.println(pattern + "" が含まれていない""); } else { System.out.println(pattern + "" が含まれている index: "" + index); } // indexOf:最初の出現位置(10以降) index = string.indexOf(pattern, 10); if (index == -1) { System.out.println(pattern + "" が含まれていない(10-)""); } else { System.out.println(pattern + "" が含まれている(10-) index: "" + index); } // lastIndexOf:最後の出現位置 index = string.lastIndexOf(pattern); if (index == -1) { System.out.println(pattern + "" が含まれていない""); } else { System.out.println(pattern + "" が含まれている lastIndex: "" + index); } // lastIndexOf:最後の出現位置(10以前) index = string.lastIndexOf(pattern, 10); if (index == -1) { System.out.println(pattern + "" が含まれていない(-10)""); } else { System.out.println(pattern + "" が含まれている(-10) lastIndex: "" + index); } } } |
indexOf/lastIndexOfを使ったプログラムの実行例
上のJavaプログラムの実行結果の例を示します。他にも様々な文字列で試してみて下さい。またインデックスも変えて確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ java StrIndex cat appleboycatdogcatboyapple appleboycatdogcatboyapple cat が含まれている index: 8 cat が含まれている(10-) index: 14 cat が含まれている lastIndex: 14 cat が含まれている(-10) lastIndex: 8 $ java StrIndex bat applebatcatdogcatboyapple applebatcatdogcatboyapple bat が含まれている index: 5 bat が含まれていない(10-) bat が含まれている lastIndex: 5 bat が含まれている(-10) lastIndex: 5 |
- システム
エンジニア - 様々な方法で検索することが可能なんですね。
- プロジェクト
マネージャー - 頻繁に使われるのはStringですね。実際に試して理解を深めていきましょう。
文字列の検索方法を理解しよう
Javaで、文字列中に特定の部分文字列が含まれているかどうかを調べる方法として、Stringクラスのメソッドcontains、indexOf、lastIndexOfを使う方法を説明しました。StringはJavaプログラム内で頻繁に使われますので、どのような応用があるか考えてみてはいかがでしょうか。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)