LoginSignup
48
39

More than 5 years have passed since last update.

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

Posted at

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() を渡せば良いことになります。

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

48
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
39