Javaでは、特定の文字列の位置を検索するために利用出来るメソッドとして「indexOf」が提供されています。
本記事では、Stringクラスの「indexOf」「lastindexOf」メソッドに関して、基本的な使い方をサンプルコードをまじえながらご紹介していきます。
Java indexOfメソッドとは
indexofメソッドはJavaのStringクラスより提供されているメソッドの1つです。
ある特定の文字列の中に、指定した文字列が含まれているかを調べるために利用します。
indexOfメソッドでは、指定した文字列が見つかった場合には該当の文字列が見つかった最初の文字位置を数値で返却します。
数値の数え方は対象文字列の先頭文字を0として考えます。
通常利用では、対象文字列の最初から指定文字列を検索しますが、第二引数で検索位置を指定することにより任意の位置からの検索が可能です。
また、対象文字列の後ろから検索を開始することが可能な「lastindexoOf」メソッドも同様にJavaのStringクラスより提供されています。
Java indexOfメソッドの基本的な使い方
まずJavaにおけるindexOfメソッドの基本についてご紹介していきます。
基本的にはStringクラスのindexOfメソッドの使い方としてご紹介しますが、StringBufferクラスやStringBuilderクラスでも使い方はほとんど同じです。
それぞれのサンプルコードを記載して紹介していきますので、ぜひ参考にしてみてください。
indexOfメソッドの基本
まずStringクラスのindexOfメソッドの基本構文について理解しておきましょう。
引数を1つだけ指定する場合
最も基本的な使い方は以下となり、検索する対象が文字か文字列かで使い分けをします。
public int indexOf(int char)
上記のサンプルコードでは「char」の部分に「あ」「い」といった1文字を指定することが可能です。
public int indexOf(String str)
2番目の上記サンプルコードでは「str」の部分に「あいうえお」などの文字列を指定します。
引数を1つだけ指定した場合には、検索対象文字列の最初の文字をインデックス番号「0」として、何番目に指定した文字・文字列が登場したかを返却します。
具体的にコードで表すと下記のようになります。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { String str = "あいうえお"; System.out.println(str.indexOf("うえ")); } }
結果は以下のようになります。
2
サンプルで表したコードは「あいうえお」という文字列の中に「うえ」という文字列が含まれているかを検索しています。
結果として「あいうえお」の文字列の最初から数えて「うえ」が見つかった位置の「う」のインデックス番号「2」が返却されています。
引数を2つ指定した場合
StringクラスのindexOfメソッドでは第二引数として数値を指定することで指定した「インデックス番号の位置」から検索を始めることが可能です。
基本構文は以下のようになります。
public int indexOf(int char, int indexNumber)
public int indexOf(String str, int indexNumber)
第二引数のindexNumberに指定した位置から検索した結果を返却します。
具体的なコードをみていきましょう。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { String str = "あいうえおあいうえお"; System.out.println(str.indexOf("うえ"), 1); } }
結果は以下のようになります。
2
一方、indexOfの第二引数を変更した場合には下記のように実行結果が異なります。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { String str = "あいうえおあいうえお"; System.out.println(str.indexOf("うえ"), 3); } }
結果は以下のようになります。
7
1つ目のサンプルでは第二引数に「1」を指定しており「あいうえおあいうえお」という文字列の最初の「い」の位置から検索を始めています。
結果、最初の「うえ」が検索対象に含まれるため、1つ目の「う」のインデックス番号「2」が返却されています。
ここで注意して頂きたいのは、返却される値は第二引数で指定したインデックス番号から数えた位置ではなく、あくまで対象文字列の頭文字から数えたインデックス番号だということです。
続いて、2つ目のサンプルを確認していきましょう。
2つ目のサンプルでは第二引数に「3」を指定していることから対象文字列の最初の「え」の位置から検索を始めることになります。
結果、最初の「うえ」が検索対象に含まれないため、2つ目の「う」のインデックス番号「7」が返却されています。
Java lastIndexOfメソッドの使い方
JavaのStringクラスにはIndexOfと似た機能としてlastIndexOfが提供されています。
lastIndexOfメソッドは文字通り、対象文字列の後ろから検索を行い指定文字列が登場したインデックス番号を返却します。
lastIndexOfメソッドの基本
基本的な使い方はindexOfメソッドとほとんど同じですので簡単にサンプルコードでご紹介していきます。
引数を1つだけ指定する場合
import java.util.*; public class Main { public static void main(String[] args) throws Exception { String str = "あいうえおあいうえお"; System.out.println(str.lastIndexOf("うえ")); } }
結果は以下のようになります。
7
サンプルコードでは「あいうえおあいうえお」という文字列から、後ろから検索して「うえ」の文字列が最初に登場した位置のインデックス番号を返却しています。
ここで注意していただきたいのは、返却されるインデックス番号は対象文字列の頭文字から数えたインデックス番号です。
lastIndexOfメソッドを使っていると返却されるインデックス番号も後ろから数えたものかと勘違いしがちですが「頭文字から数えたインデックス番号」が返却されるので意識しておきましょう。
引数を2つ指定する場合
import java.util.*; public class Main { public static void main(String[] args) throws Exception { String str = "あいうえおあいうえお"; System.out.println(str.lastIndexOf("え"), 3); } }
結果は以下のようになります。
3
今回のサンプルの場合、第二引数に「3」を指定しており対象文字列は最初の「あいうえ」となります。
ちなみに第二引数に「2」を指定した場合には対象文字列が最初の「あいう」となるため、返却値は指定文字列が見つからなかった場合を意味する「-1」が返却されます。
さいごに
本記事では、文字列の位置を検索出来る機能として、JavaのStringクラスから提供されているindexOfメソッド・lastIndexOfメソッドについて基本的な使い方をご紹介してきました。
indexOfメソッドやlastIndexOfメソッドは、今回ご紹介した「Stringクラス」以外にも「StringBufferクラス」「StringBuilderクラス」「ArrayListクラス」などから提供されています。
基本的な使い方は同じですが、それぞれ微妙に仕様が異なることもありますので、利用する際はそれぞれのクラス毎の使い方をきちんと把握した上で実装するようにしましょう。