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

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

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

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

サロゲートペアを使用する文字が含まれていた場合には、 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()));
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample9_1.java

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

java JSample9_1

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

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

-- --

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

( Written by Tatsuo Ikura )

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

著者 / TATSUO IKURA

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