Java
Android
絵文字

絵文字を入れたら文字数カウントが狂った時に見るページ

More than 3 years have passed since last update.

Unicode 絵文字、かわいいのでよく使いますよね。

Twitter みたいに文字数の制限があるようなサービスの場合、以下のようなコードで文字数をカウントしようとすると、絵文字などのサロゲートペアが現れた時にカウントが狂ってしまいます。

String message = // ...

int count = message.length();

String#length() は、16bit にエンコードされた単位で文字数を数えるので、絵文字のようなサロゲートペアで表される文字は、2 文字としてカウントされます(その辺りの詳しい話題は、この記事が詳しいです)。

で、その辺をうまいことやるイイカンジのメソッドが String#codePointCount(int, int) です。

String message = // ...

int count = message.codePointCount(0, message.length());

引数は、カウントを始める文字列の index と、カウントを終える文字列の index になります。この index は 16bit にエンコードされた単位をベースにするので、文字列全体をカウントしたければ、上記のように、0 と length() を渡せば良いことになります。

メソッド名からは少し分かりづらくはありますが、これで簡単に絵文字などのサロゲートペアを含む文字列のカウントが出来るようになります。