1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Java]サロゲートペアの文字列の長さを取得する

Posted at

サロゲートペアとは

Unicode(UTF-16)では、通常、1文字を2バイトで表現します。
しかし、Unicodeで扱うべき文字が増えるにつれ、2バイトで表現できる文字数(65535文字)では不足するようになり、一部の文字を4バイトで表現することで、扱える文字数を増やすことになりました。このような4バイト文字のことをサロゲートペアと言います。

サロゲートペアの文字列の長さを取得

"叱"という文字はサロゲートペアであるため、ふつうにlengthメソッドを使用してしまうと、2文字と見なされます。
そのため、サロゲートペアを含んだ文字列を正しくカウントするには、lengthメソッドの代わりに、codePointCountメソッドを使用します。

var str1 = "こんにちは";
System.out.println(str1.length());   // 結果:5

var str2 = "叱る";
System.out.println(str2.length());   // 結果:3

// こうすると正しく文字数が取れる
System.out.println(str2.codePointCount(0, str2.length()));   // 結果:2

codePointCountメソッド

/**
@param begin 長さを求める開始位置
@param end 長さを求める終了位置
@return 文字数
*/
public int codePointCount(int begin, int end)
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?