文字列の文字の数(コードポイントの数)を取得する

文字列に含まれる文字の個数を取得するには String クラスで用意されている codePointCount メソッドを使用します。実際には文字に割り当てられている Unicode コードポイントの数を取得します。 Unicode コードポイントはサロゲートペアを使用する文字であっても 1 つのコードポイントが割り当てられています。ここでは Java で文字列に含まれる文字の数を取得する方法について解説します。

(Last modified: )

String.codePointCountメソッドの使い方

文字列に含まれる文字の数を取得するには String クラスで用意されている codePointCount メソッドを使用します。書式は次のとおりです。

public int codePointCount(int beginIndex, int endIndex)

パラメータ:
beginIndex - テキスト範囲内の最初のcharへのインデックス
endIndex - テキスト範囲内の最後のcharの直後のインデックス

戻り値:
指定されたテキスト範囲内のUnicodeコード・ポイントの数

例外:
IndexOutOfBoundsException - beginIndexが負であるか、endIndexがこのStringの長さより大きいか、あるいはbeginIndexがendIndexより大きい場合。

1 番目の引数に指定したインデックスから 2 番目の引数に指定したインデックスの一つ前の範囲にある文字の数を戻り値として取得します。文字列の先頭から最後までの文字の数を取得するには、開始インデックスに 0 、終了インデックスに 文字列.length() を指定します。

codePointCount メソッドは文字列に含まれる文字の Unicode コードポイントの数を返しますが、 Unicode コードポイントは 1 文字につき 1 つのコードが割り当てられているため、結果として文字の数を取得することができます。サロゲートペアを使用する文字であっても Unicode コードポイントは 1 つのコードですので、サロゲートペアを使用する文字列が含まれている場合も文字数を取得することができます。

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

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

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

System.out.println(msg.length());  // 7
System.out.println(msg.codePointCount(0, msg.length()));  // 7

サロゲートペアを使用する文字が含まれない文字列の場合は、 length メソッドも codePointCount メソッドも同じ値を返します。

もう一つサンプルを見てください。

String msg = "●あ";

System.out.println(msg.length());  // 3
System.out.println(msg.codePointCount(0, msg.length()));  // 2

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

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

サロゲートペアを使用する文字が含まれていた場合には、 length メソッドは UTF-16 文字コードの数を返すため 3 となりますが、 codePointCount メソッドは Unicode コードポイントの数を返すため 2 となります。

※ 文字列の長さ( UTF-16 文字コードの数)を取得する length メソッドについては「文字列の長さを取得する(String.length)」を参照してください。

サンプルコード

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

class JSample9_1{
  public static void main(String[] args){
    String msg1 = "東京都港区赤坂";
    String msg2 = "●あ";

    System.out.println(msg1.codePointCount(0, msg1.length()));
    System.out.println(msg2.codePointCount(0, msg2.length()));
  }
}

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

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

コンパイルを行います。

javac -encoding UTF-8 JSample9_1.java

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

java JSample9_1

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

2 つの文字列の文字数をそれぞれ取得しました。

-- --

Java で文字列に含まれる文字の数を取得する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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