文字列の中で指定した文字または文字列が出現するインデックスを取得する

String クラスで用意されている indexOf メソッドは対象の文字列の中で指定した文字や文字列が最初に出現するインデックスを返します。また lastIndexOf メソッドは最後に出現するインデックスを返します。ここでは Java で文字列の中で指定した文字または文字列が出現するインデックスを取得する方法について解説します。

(Last modified: )

文字が最初に出現するインデックスを取得する

対象の文字列の中で指定した文字が最初に出現するインデックスを取得するには String クラスの indexOf メソッドを使います。書式は次のとおりです。

public int indexOf(int ch)

パラメータ:
ch - 文字(Unicodeコード・ポイント)

戻り値:
このオブジェクトによって表される文字シーケンス内で、指定された文字が最初に出現する位置のインデックス。文字がない場合は-1。

1 番目の引数に検索したい文字の Unicode コードポイントの値を指定します。対象の文字列の中で先頭の文字から順に検索し最初に見つかったインデックスを戻り値として返します。

次のサンプルを見てください。

String str = "Hello World";
System.out.println(str.indexOf((int)'o'));  // 4

対象の文字列の中に 'o' は 2 回出てきますが、 indexOf メソッドは最初に出現したインデックスを返します。

なお先頭の文字からではなく、指定したインデックスの位置から末尾に向かって調べる場合には引数の異なる次の indexOf メソッドを使用します。

public int indexOf(int ch, int fromIndex)

パラメータ:
ch - 文字(Unicodeコード・ポイント)
fromIndex - 検索開始位置のインデックス

戻り値:
このオブジェクトによって表される文字列で、指定された文字がfromIndexと同じかこれより大きいインデックス位置にある場合は、最初に出現した位置のインデックス。文字がない場合は-1。

1 番目の引数に検索したい文字の Unicode コードポイントの値を指定します。そして 2 番目の引数で指定したインデックスの位置から末尾に向かって順に検索し最初に見つかったインデックスを戻り値として返します。

次のサンプルを見てください。

String str = "Hello World";
System.out.println(str.indexOf((int)'o', 5));  // 7

対象の文字列の中でインデックス 5 の位置から順に後ろに向かって検索していき、 'o' が最初に出現したインデックスを返します。

文字が最後に出現するインデックスを取得する

対象の文字列の中で指定した文字が最後に出現するインデックスを取得するには String クラスの lastIndexOf メソッドを使います。書式は次のとおりです。

public int lastIndexOf(int ch)

パラメータ:
ch - 文字(Unicodeコード・ポイント)

戻り値:
このオブジェクトによって表される文字シーケンス内で、指定された文字が最後に出現する位置のインデックス。文字がない場合は-1。

1 番目の引数に検索したい文字の Unicode コードポイントの値を指定します。対象の文字列の中で末尾の文字から前に向かって順に検索し最初に見つかったインデックスを戻り値として返します。

次のサンプルを見てください。

String str = "Hello World";
System.out.println(str.lastIndexOf((int)'o'));  // 7

対象の文字列の中に 'o' は 2 回出てきますが、 lastIndexOf? メソッドは最後に出現したインデックスを返します。

なお末尾の文字からではなく、指定したインデックスの位置から先頭に向かって調べる場合には引数の異なる次の lastIndexOf? メソッドを使用します。

public int lastIndexOf(int ch, int fromIndex)

パラメータ:
ch - 文字(Unicodeコード・ポイント)
fromIndex - 検索開始位置のインデックス。 fromIndexの値に対して制約はない

戻り値:
このオブジェクトによって表される文字シーケンス内で、指定された文字がfromIndexと同じかこれより小さいインデックス位置に最後に出現する位置のインデックス。指定された文字がその位置より前にない場合は-1。

1 番目の引数に検索したい文字の Unicode コードポイントの値を指定します。そして 2 番目の引数で指定したインデックスの位置から先頭に向かって順に検索し最初に見つかったインデックスを戻り値として返します。

次のサンプルを見てください。

String str = "Hello World";
System.out.println(str.lastIndexOf((int)'o', 6));  // 4

対象の文字列の中でインデックス 6 の位置から順に先頭に向かって検索していき、 'o' が最初に出現したインデックスを返します。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample18-1.java という名前で保存します。

class JSample18_1{
  public static void main(String[] args){
    String str = "Hello World";
    System.out.println(str.indexOf((int)'o'));
    System.out.println(str.lastIndexOf((int)'o'));
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample18_1.java

その後で、次のように実行してください。

java JSample18_1

文字が最初または最後に出現するインデックスを取得する(1)

対象の文字列の中で指定した文字が最初および最後に出現するインデックスを取得しました。

文字列が最初に出現するインデックスを取得する

対象の文字列の中で指定した部分文字列が最初に出現するインデックスを取得するには String クラスの indexOf メソッドを使います。書式は次のとおりです。

public int indexOf(String str)

パラメータ:
str - 検索対象の部分文字列

戻り値:
指定された部分文字列が最初に出現する位置のインデックス。そのような出現箇所がない場合は-1。

1 番目の引数に検索したい文字列を指定します。対象の文字列の中で先頭の文字から順に検索し最初に出現したインデックス(部分文字列の最初の文字のインデックス)を戻り値として返します。

次のサンプルを見てください。

String str = "東京都と京都府";
System.out.println(str.indexOf("京都"));  // 1

対象の文字列の中に "京都" は 2 回出てきますが、 indexOf メソッドは最初に出現したインデックスを返します。

なお先頭の文字からではなく、指定したインデックスの位置から末尾に向かって調べる場合には引数の異なる次の indexOf メソッドを使用します。

public int indexOf(String str, int fromIndex)

パラメータ:
str - 検索対象の部分文字列
fromIndex -検索開始位置のインデックス

戻り値:
指定されたインデックス以降で、指定された部分文字列が最初に出現する位置のインデックス。そのような出現箇所がない場合は-1。

1 番目の引数に検索したい文字列を指定します。そして 2 番目の引数で指定したインデックスの位置から末尾に向かって順に検索し最初に見つかったインデックスを戻り値として返します。

次のサンプルを見てください。

String str = "東京都と京都府";
System.out.println(str.indexOf("京都"), 2);  // 4

対象の文字列の中でインデックス 2 の位置から順に末尾に向かって検索していき、 "京都" が最初に出現したインデックスを返します。

文字列が最後に出現するインデックスを取得する

対象の文字列の中で指定した部分文字列が最後に出現するインデックスを取得するには String クラスの lastIndexOf メソッドを使います。書式は次のとおりです。

public int lastIndexOf(String str)

パラメータ:
str - 検索対象の部分文字列

戻り値:
指定された部分文字列が最後に出現する位置のインデックス。そのような出現箇所がない場合は-1。

1 番目の引数に検索したい文字列を指定します。対象の文字列の中で末尾の文字から先頭に向かって順に検索し最初に出現したインデックス(部分文字列の最初の文字のインデックス)を戻り値として返します。

次のサンプルを見てください。

String str = "東京都と京都府";
System.out.println(str.lastIndexOf("京都"));  // 4

対象の文字列の中に "京都" は 2 回出てきますが、 lastIndexOf? メソッドは最後に出現したインデックスを返します。

なお末尾の文字からではなく、指定したインデックスの位置から先頭に向かって調べる場合には引数の異なる次の lastIndexOf メソッドを使用します。

public int lastIndexOf(String str, int fromIndex)

パラメータ:
str - 検索対象の部分文字列
fromIndex - 検索開始位置のインデックス

戻り値:
指定された部分文字列が最後に出現する位置のインデックス(指定されたインデックスから逆方向に検索を行う)。そのような出現箇所がない場合は-1。

1 番目の引数に検索したい文字列を指定します。そして 2 番目の引数で指定したインデックスの位置から先頭に向かって順に検索し最初に見つかったインデックスを戻り値として返します。

次のサンプルを見てください。

String str = "東京都と京都府";
System.out.println(str.lastIndexOf("京都"), 3);  // 1

対象の文字列の中でインデックス 3 の位置から順に先頭に向かって検索していき、 "京都" が最初に出現したインデックスを返します。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample18-2.java という名前で保存します。

class JSample18_2{
  public static void main(String[] args){
    String str = "東京都と京都府";

    System.out.println(str.indexOf("京都"));
    System.out.println(str.lastIndexOf("京都"));
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample18_2.java

その後で、次のように実行してください。

java JSample18_2

文字列が最初または最後に出現するインデックスを取得する(1)

対象の文字列の中で指定した部分文字列が最初および最後に出現するインデックスを取得しました。

-- --

Java で指定した区切り文字で複数の文字列を連結し新しい文字列を作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。