文字列から指定したインデックスのUnicodeコードポイントを取得する

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

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

String.codePointAtメソッドの使い方

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

public int codePointAt​(int index)

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

戻り値:
指定されたindexにある文字のコード・ポイント値

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

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

※ Unicode コードポイントとは、 Unicode で扱っているすべての文字に割り当てられたコードです。 Unicode コードポイントをどのように符号化するのかを定めているのが UTF-16 や UTF-8 です。

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

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

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

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

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

System.out.println(msg.codePointAt​(0));  // 26481
System.out.println(msg.codePointAt​(3));  // 28207

インデックス 0 の位置にある "東" の文字の Unicode コードポイントと、インデックス 3 の位置にある "港" の文字の Unicode コードポイントを取得しました。

サンプルコード

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

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

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

コンパイルを行います。

javac -encoding UTF-8 JSample10_1.java

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

java JSample10_1

String.codePointAt​メソッドの使い方(2)

文字列に含まれる文字を先頭から最後まで順番に取り出して Unicode コードポイントを取得し画面に表示しました。

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

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

サロゲートペアを使用する文字の場合、 UTF-16 文字コードでは 2 つ文字コードを使用しますが、 Unicode コードポイントでは 1 つのコードで表すことができます。

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

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

このようにサロゲートペアを使用する文字はインデックスが 2 つありますが、この文字に対して codePointAt​ メソッドを使用する場合、最初のインデックスを指定すると該当の文字の Unicode コードポイントを返します。なお次のインデックスを指定すると、下位サロゲートの範囲の UTF-16 文字コードを返します。

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

String msg = "𪛊あ";

System.out.println(msg.codePointAt​(0));  // 173770
System.out.println(msg.codePointAt​(1));  // 57034
System.out.println(msg.codePointAt​(2));  // 12354

サロゲートペアの文字に対する Unicode コードポイントを取得する場合は、最初のインデックスを指定して codePointAt​ メソッドを実行してください。

-- --

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

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。