すぐに使える!JavaのindexOfとlastIndexOf

javaのindexof
  • このエントリーをはてなブックマークに追加
  • Pocket

Javaでよく出てくるメソッドにindexOfとlastIndexOfがある。いろいろなクラスで用意されていて、イメージ的には検索をしたいときに使うものだ。

このページでは様々な場面で活躍するindexOfメソッドについてお伝えする。主要なクラスのほとんどでサンプルコードも用意してみた。参考にして欲しい。

JavaのindexOf / lastIndexOfの使い方

Indexとは索引のことだ。本の終わりには、索引がある。索引は、言葉とその言葉が使われているページの一覧である。Javaのクラスが持つindexOfメソッドやlastIndexOfメソッドは、この索引のように言葉を引数として渡すと、ページに当たる位置を戻してくる。

次のクラスは文字や文字列の位置を扱うindexOfメソッドやlastIndexOfメソッドを持っている。探したい文字や文字列を引数として渡すと、その位置が戻ってくる。

  • String
  • StringBuffer
  • StringBuilder

次のクラスはオブジェクトの配列の位置を扱うindexOfメソッドやlastIndexOfメソッドを持っている。

  • ArrayList
  • LinkedArray

書き方の基本はどれも同じだ。

最初に出現する位置 = オブジェクト.indexOf(値)

最後に出現する位置 = オブジェクト.lastIndexOf(値)

JavaでのindexOf / lastIndexOfの書き方の詳細を確認していこう。

クラスによる違い

クラスによってメソッドの機能に違いがある。文字を探すのか、文字列を探すのか、先頭から探すのか、末尾から探すのか、その機能の詳細をクラスごとにまとめてみよう。

サンプルプログラムも下の方に用意した。こちらをさっさと確認したいという方は、飛ばしてそちらを見るのがいいだろう。

String - indexOf

文字列の中の文字を検索するためのメソッドindexOfのAPI仕様を紹介する。

indexOf(int ch)

戻り値の型

戻り値の型 public int

内容

指定された文字が最初に出現するこの文字列の中のインデックスを戻す。

 

もしこの文字列オブジェクトによって表された文字順の中に、chの値を持つ文字が出現したならば、最初に出現したインデックス(ユニコード単位の中の)が戻される。

0から0xFFF(すべてのコードを含む)の範囲にあるchの値のために、最小値kは、以下のようなになる;

this.charAt(k) == ch

はtrueである。その他のchの値のために、最小値kは以下のようになる:

this.codePointAt(k) == ch

はtrueである。どちらの場合においても、もしこの文字列の中にそのような文字が一つも出現しないならば、-1が戻される。

 

引数:ch - 一つの文字(ユニコードの文字コード番号)

 

戻り値:このオブジェクトによって表された文字順で、最初に出現した文字のインデックス、あるいは、もし文字が出現しないならば-1。

indexOf(int ch, int fromIndex)

戻り値の型

戻り値の型 public int

内容

指定されたインデックスから検索を始めて、指定された文字が最初に出現するこの文字列の中のインデックスを戻す。

 

もし、fromIndexより小さくないインデックスの位置にある文字列オブジェクトによって表された文字順の中に、chの値を持つ文字が出現したならば、最初に出現したインデックスが戻される。

0から0xFFF(すべてのコードを含む)の範囲にあるchの値のために、最小値kは以下のようになる:

(this.charA(k) == ch) && (k >= fromIndex)

はtrueである。他のchの値のために、最小値は以下のようになる。

(this.codePointAt(k) == ch) && (k >= fromIndex)

はtrueである。もしこの文字列のfromIndex位置、もしくはfromIndexの後のどちらの場合にも、そのような文字が一つも出現しないならば、-1が戻される。

fromIndexの値に対する制限はない。もしそれがマイナスならば、それがゼロであるのと同じ結果になる:この全体の文字列は検索されるかもしれない。もしそれがこの文字列の長さより大きいのであれば、それがこの文字列の長さと同じであるかのような結果となる:-1が戻される。

すべてのインデックスはcharの値(ユニコード単位)で特定される。

 

引数:

ch - 一つの文字(ユニコードの文字コード番号)

fromIndex - 検索を始めるためのインデックス

 

戻り値:fromIndexより大きい、もしくは等しいこのオブジェクトによって表された文字順で、最初に出現した文字のインデックス、あるいは、もし文字が出現しないならば-1。

文字列の中の一部分にあたる文字列を検索するためのメソッドindexOfのAPI仕様を紹介する。

indexOf(String str)

戻り値の型

戻り値の型 public int

内容

指定された部分文字列が最初に出現するこの文字列の中のインデックスを戻す。

戻されるインデックスは、以下のように表される最小値k:

this.startsWith(str, k)

もしそのようなkの値が一つも存在しないならば、-1が戻される。

 

引数:str - 検索するための部分文字列

 

戻り値:指定された部分文字列が最初に出現するインデックス、あるいは、もしそれが一つも出現しないならば-1。

indexOf(String str, int fromIndex))

戻り値の型

戻り値の型 public int

内容

指定されたインデックスから検索を始めて、指定された部分文字列が最初に出現するこの文字列の中のインデックスを戻す。

戻されるインデックスは、以下のように表される最小値k:

k >= fromIndex  &&  this.startsWith(str , k)

もしそのようなkの値が一つも存在しないならば、-1が戻される。

 

引数:

str - 検索するための部分文字列

fromIndex - 検索を始めるためのインデックス

 

戻り値:指定されたインデックスから始めて、指定された部分文字列が最初に出現するインデックス、あるいは、それが一つも出現しないならば-1。

String - lastIndexOf

文字列の中の文字を検索するためのメソッドlastIndexOfのAPI仕様を紹介する。

lastIndexOf (int ch)

戻り値の型

戻り値の型 public int

内容

指定された文字が最後に出現するこの文字列の中のインデックスを戻す。

0から0xFFF(すべてのコードを含む)の範囲にあるchの値のために、戻されるインデックス(ユニコード単位の中の)は以下のような最大値kになる:

this.charA(k) == ch

はtrueである。他のchの値のために、最大値kは以下のようになる。

this.codePointAt(k) == ch

はtrueである。

どちらの場合においても、もしこの文字列の中にそのような文字が一つも出現しないならば、-1が戻される。文字列は、最後の文字から始めて逆向きに検索される。

 

引数:ch - 一つの文字(ユニコードの文字コード番号)

 

戻り値:このオブジェクトによって表された文字順で、最後に出現した文字のインデックス、あるいは、もし文字が出現しないならば-1。

lastIndexOf(int ch, int fromIndex)

戻り値の型

戻り値の型 public int

内容

指定されたインデックスから逆に検索を始めて、指定された文字が最後に出現するこの文字列の中のインデックスを戻す。

 

0から0xFFF(すべてのコードを含む)の範囲にあるchの値のために、戻されるインデックス(ユニコード単位の中の)は以下のような最大値kになる:

(this.charA(k) == ch) && (k <= fromIndex)

はtrueである。他のchの値のために、最大値kは以下のようになる。

(this.codePointAt(k) == ch) && (k <= fromIndex)

はtrueである。もしこの文字列のfromIndex位置、もしくはfromIndexの前のどちらの場合にも、そのような文字が一つも出現しないならば、-1が戻される。

すべてのインデックスはcharの値(ユニコード単位)で特定される。

 

引数:

ch - 一つの文字(ユニコードの文字コード番号)

fromIndex - 検索を始めるためのインデックス。fromIndexの値に対する制限はない。もしそれがこの文字列の長さより大きいか、もしくは同じであれば、それがこの文字列の長さより小さいものと同じであるかのような結果となる:この全体の文字列が検索される。もしそれがマイナスであれば、それは-1である時と同じ結果となる:-1が戻される。

 

戻り値:fromIndexより小さいかもしくは同じであるこのオブジェクトによって表された文字順で、最後に出現した文字のインデックス、あるいは、もし文字がその位置の前にないのであれば-1.

文字列の中の文字列を検索するためのメソッドlastIndexOfのAPI仕様を紹介する。

lastIndexOf(String str)

戻り値の型

戻り値の型 public int

内容

指定された部分文字列が最後に出現するこの文字列の中のインデックスを戻す。空の文字列””の最後の出現は、インデックス値this.length()で起きると考えられている。

戻されるインデックスは、以下のように表される最大値k:

this.startsWith(str , k)

もしそのようなkの値が一つも存在しないならば、-1が戻される。

 

引数:str - 検索するための部分文字列

 

戻り値:指定された部分文字列が最後に出現するインデックス、あるいは、もしそれが一つも出現しないならば-1。

lastIndexOf(int ch, int fromIndex)

戻り値の型

戻り値の型 public int

内容

指定されたインデックスから逆に検索を始めて、指定された部分文字列が最後に出現するこの文字列の中のインデックスを戻す。

戻されるインデックスは、以下のように表される最大値k:

k <= fromIndex  &&  this.startsWith(str , k)

もしそのようなkの値が一つも存在しないならば、-1が戻される。

 

引数:

str - 検索するための代わりの文字列

fromIndex - 検索を始めるためのインデックス

 

戻り値:指定されたインデックスから逆に検索を始めて、指定された部分文字列が最後に出現するインデックス、あるいは、それが一つも出現しないならば-1。

StringBuffer - indexOf

文字列の中の文字列を検索するためのメソッドindexOfのAPI仕様を紹介する。

indexOf(String str)

戻り値の型

戻り値の型 public int

内容

指定された部分文字列が最初に出現するこの文字列の中のインデックスを戻す。

戻される整数は最小値kで、以下のように表される:

this.toString().startsWith(str, <i>k</i>)

はtrueである。

 

引数:str - いずれかの文字列

 

戻り値:もしこのオブジェクトの中で文字引数が部分文字列として存在するならば、その最初の部分文字列の最初の文字のインデックスが戻される:もしそれが部分文字列として出現しないならば、-1が戻される。

 

以降:1.4

indexOf(String str, int fromIndex))

戻り値の型

戻り値の型 public int

内容

指定されたインデックスから始めて、指定された部分文字列が最初に出現するこの文字列の中のインデックスを戻す。戻される整数は最小値kで、以下のように表される:

k >= Math.min(fromIndex, this.length()) &&

               this.toString().startsWith(str, k)

もしそのようなkの値が一つも存在しないならば、-1が戻される。

 

引数:

str - 検索する部分文字列

fromIndex - 検索を始めるためのインデックス

 

戻り値:指定されたインデックスから始めて、指定された部分文字列が最初に出現するこの文字列の中のインデックス。

 

以降:1.4

StringBuilder - indexOf

文字列の中の文字列を検索するためのメソッドindexOfのAPI仕様を紹介する。

indexOf(String str)

戻り値の型

戻り値の型 public int

内容

指定された部分文字列が最初に出現するこの文字列の中のインデックスを戻す。

戻されるインデックスは最小値kで、以下のように表される。

this.toString().startsWith(str, <i>k</i>)

はtrueである。

 

引数:str - いずれかの文字列

 

戻り値:もしこのオブジェクトの中で文字引数が部分文字列として存在するならば、その最初の部分文字列の最初の文字のインデックスが戻される:もしそれが部分文字列として出現しないならば、-1が戻される。

indexOf(String str, int fromIndex))

戻り値の型

戻り値の型 public int

内容

指定されたインデックスから始めて、指定された部分文字列が最初に出現するこの文字列の中のインデックスを戻す。戻される整数は最小値kで、以下のように表される:

k >= Math.min(fromIndex, this.length()) &&

 

               this.toString().startsWith(str, k)

もしそのようなkの値が一つも存在しないならば、-1が戻される。

引数:

str - 検索する部分文字列

fromIndex - 検索を始めるためのインデックス

 

戻り値:指定されたインデックスから始めて、指定された部分文字列が最初に出現するこの文字列の中のインデックス。

ArrayList

このクラスのindexOf()メソッドについての詳細は、他のメソッドと共に別の記事「Java 配列の容量と順序を簡単に扱う(ArrayList)」に載せられている。

LinkedArray

このクラスのindexOf()メソッドについての詳細は、他のメソッドと共に別の記事「Java 待ち行列を簡単に扱う(LinkedList)」に載せられている。

Stringクラスの文字検索のサンプルプログラム

それでは実際にサンプルプログラムを確認してみよう。

このサンプルは、Stringクラスの文字列検索を行うindexOf / lastIndexOfメソッドの機能を示している。文字が見つかった時だけでなく、みつからならかった場合も含んでいる。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] Stringクラスのオブジェクトtextを、初期値:"abcdefabcdef"で生成する。
  • [2] 変数indexを宣言する。
  • [3][4]i indexにindexOf('b')を代入し、表示する。
  • [5][6] indexにindexOf('b',0)を代入し、表示する。
  • [7][8] indexにindexOf('b',-2)を代入し、表示する。
  • [9][10] indexにindexOf('?',0)を代入し、表示する。
  • [11 ]変数lastIndexを宣言する。
  • [12][13] lastIndex にlastIndexOf('f')を代入し、表示する。
  • [14][15] lastIndex にlastIndexOf('f',11)を代入し、表示する。
  • [16][17] lastIndex にlastIndexOf('f',-2)を代入し、表示する。
  • [18][19] lastIndex にlastIndexOf('?',11)を代入し、表示する。

Stringクラスの文字列検索のサンプルプログラム

このサンプルは、Stringクラスの文字列検索を行うindexOf / lastIndexOfメソッドの機能を示している。文字列が見つかった時だけでなく、みつからならかった場合も含んでいる。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] Stringクラスのオブジェクトtextを、初期値:"abcdefabcdef"で生成する。
  • [2] 変数indexを宣言する。
  • [3][4]i indexにindexOf("bc")を代入し、表示する。
  • [5][6] indexにindexOf("bc",0)を代入し、表示する。
  • [7][8] indexにindexOf("bc",-2)を代入し、表示する。
  • [9][10] indexにindexOf("?!",0)を代入し、表示する。
  • [11]変数lastIndexを宣言する。
  • [12][13] lastIndex にlastIndexOf("ef")を代入し、表示する。
  • [14] [15] lastIndex にlastIndexOf("ef",11)を代入し、表示する。
  • [16][17] lastIndex にlastIndexOf("ef",-2)を代入し、表示する。
  • [18][19] lastIndex にlastIndexOf("?!",11)を代入し、表示する。

StringBufferクラスの文字列検索のサンプルプログラム

このサンプルは、StringBufferクラスの文字列検索を行うindexOf / lastIndexOfメソッドの機能を示している。文字列が見つかった時だけでなく、みつからならかった場合も含んでいる。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] StringBufferクラスのオブジェクトbufferを、初期値:"abcdefabcdef"で生成する。
  • [2] 変数indexを宣言する。
  • [3][4] indexにindexOf("bc")を代入し、表示する。
  • [5][6] indexに indexOf("bc",0)を代入し、表示する。
  • [7][8] indexにindexOf("bc",-2)を代入し、表示する。
  • [9][10] indexにindexOf("?!",0)を代入し、表示する。

StringBuilderクラスの文字列検索のサンプルプログラム

このサンプルは、StringBuilderクラスの文字列検索を行うindexOf / lastIndexOfメソッドの機能を示している。文字列が見つかった時だけでなく、みつからならかった場合も含んでいる。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] StringBufferクラスのオブジェクトbuilderを、初期値:"abcdefabcdef"で生成する。
  • [2] 変数indexを宣言する。
  • [3][4] indexにindexOf("bc")を代入し、表示する。
  • [5][6] indexにindexOf("bc",0)を代入し、表示する。
  • [7][8] indexにindexOf("bc",-2)を代入し、表示する。
  • [9][10] indexにindexOf("?!",0)を代入し、表示する。

まとめ

このページでは、indexOfとlastIndexOfについてまとめてご紹介した。

検索のために、様々なクラスに組み込まれているメソッドだ。よく使うメソッドなので使い方を含め覚えてしまおう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する