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() を渡せば良いことになります。
メソッド名からは少し分かりづらくはありますが、これで簡単に絵文字などのサロゲートペアを含む文字列のカウントが出来るようになります。