- Home ›
- Java入門 ›
- 文字列(Stringクラス)
文字列から指定したインデックスのUnicodeコードポイントを取得する
文字列の指定したインデックスの位置にある文字の Unicode コードポイントを取得するには String クラスで用意されている codePointAt メソッドを使用します。文字列は 0 個以上の複数の文字で構成されていますが、先頭から順番に 0 、 1 、 2 ...とインデックスが割り当てられています。ここでは Java で文字列の指定したインデックスの Unicode コードポイントを取得する方法について解説します。
(Last modified: )
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 です。
例えば文字列が "東京都港区赤坂" だった場合、それぞれの文字のインデックスは次のようになります。
インデックスは最初の文字が 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
文字列に含まれる文字を先頭から最後まで順番に取り出して Unicode コードポイントを取得し画面に表示しました。
サロゲートペアを使用する文字の場合
Java では内部的に文字を UTF-16 で保管しているため、サロゲートペアについて考慮する必要があります。サロゲートペアとは 1 つの文字を 2 つの文字コードで表す文字のことです。
サロゲートペアを使用する文字の場合、 UTF-16 文字コードでは 2 つ文字コードを使用しますが、 Unicode コードポイントでは 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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。