サロゲートペアとは
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)