文字列から指定したインデックスの文字を取得する

文字列の指定したインデックスの位置にある文字を取得するには String クラスで用意されている charAt メソッドを使用します。文字列は 0 個以上の複数の文字で構成されていますが、先頭から順番に 0 、 1 、 2 ...とインデックスが割り当てられています。ここでは Java で文字列の指定したインデックスの文字を取得する方法について解説します。

(Last modified: )

String.charAtメソッドの使い方

文字列の指定したインデックスの位置にある文字を取得するには String クラスで用意されている charAt メソッドを使用します。書式は次のとおりです。

public char charAt(int index)

パラメータ:
index - char値のインデックス。

戻り値:
文字列内の指定されたインデックス位置にあるchar値。 最初のchar値のインデックスが0になる。

例外:
IndexOutOfBoundsException - index引数が負の値、または文字列の長さと同じかこれより大きい値の場合。

1 番目の引数に指定したインデックスの位置にある文字を、 char 型の値で戻り値として返します。

例えば文字列が "東京都港区赤坂" だった場合、それぞれの文字のインデックスは次のようになります。

String.charAtメソッドの使い方(1)

インデックスは最初の文字が 0 、次の文字が 1 、と先頭から順番に割り当てられています。インデックス 0 の文字は "東" 、インデックス 3 の文字は "港" です。

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

String msg = "東京都港区赤坂";

System.out.println(msg.charAt(0));  // 東
System.out.println(msg.charAt(3));  // 港

指定したインデックスの位置にある文字を取得することができました。

サンプルコード

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

class JSample5_1{
  public static void main(String[] args){
    String msg = "東京都港区赤坂";

    for (int i = 0; i < msg.length(); i++){
      System.out.println( i + ";" + msg.charAt(i));
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample5_1.java

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

java JSample5_1

String.charAtメソッドの使い方(1)

文字列に含まれる文字を先頭から最後まで順番に取り出して画面に表示しました。

サロゲートペアを使用する文字の場合

Java では内部的に文字を UTF-16 で保管しているため、サロゲートペアについて考慮する必要があります。サロゲートペアとは 1 つの文字を 2 つの文字コードで表す文字のことです。

例えば "●" という文字はサロゲートペアを使用する文字ですが、 "●あ" という文字列のインデックスは次のようになります。

サロゲートペアを使用する文字の場合(1)

※ ● のところには次の文字が入ります。

サロゲートペアを使用する文字の場合(2)

このようにサロゲートペアを使用する文字はインデックスが 2 つありますが、この文字に対して charAt メソッドを使用すると、最初のインデックスでは上位サロゲートの範囲、次のインデックスでは下位サロゲートの範囲の文字コードを返します。

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

String msg = "●あ";

System.out.println(Integer.toString(msg.charAt(0)));  // 55401
System.out.println(Integer.toString(msg.charAt(1)));  // 57034
System.out.println(Integer.toString(msg.charAt(2)));  // 12354

※ ● のところには次の文字が入ります。

サロゲートペアを使用する文字の場合(2)

charAt メソッドの戻り値として UTF-16 の文字コードを取得したあと文字列にして出力しました。

このように対象の文字列にサロゲートペアを使用する文字が含まれていた場合、 charAt メソッドの戻り値が 1 つで 1 文字を表さなくなりますのでご注意ください。

-- --

Java で文字列の指定したインデックスの文字を取得する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。