Contents
【Java】codePointCountでサロゲートペアにも対応した文字列の長さを取得する

この記事では、JavaのcodePointCountメソッドで文字列の長さを取得する方法を解説します。
Javaのlengthメソッドが使えない?サロゲートペアについて
lengthメソッドを使用すると、文字列の長さを取得することができます。
length() | 文字列の長さを取得します |
lengthメソッドを使用すると、文字列の長さを取得することができます。
String 文字列 = ""; String 文字列2 = "テスト"; System.out.println(文字列.length()); System.out.println(文字列2.length()); // 実行結果 0 3
ただし、サロゲートペアが含まれる場合には正しい値にならないため、そのような文字が含まれる場合を考慮しなければいけない場合、lengthメソッドはそのまま使用できません。
String str = ""; System.out.println(str.length()); // 実行結果 2
は魚のホッケの漢字ですが、サロゲートペア※であるため取得文字は2となります。
※サロゲートペア
Unicode(UTF-16)では、通常、1文字を2バイトで表現します。しかし、Unicodeで扱うべき文字が増えるにつれ、2バイトで表現できる文字数(65535文字)では不足するようになりました。そこで、一部の文字を4バイトで表現することで、扱える文字数を増やす対応が行われました。
codePointCountでサロゲートペアにも対応した文字列の長さを取得
codePointCount(0, 文字列.length()) | サロゲートペアにも対応した文字列の長さを取得する |
サロゲートペアについても考慮が必要な場合は、codePointCountを使用する必要があります。含まない場合についてもlengthメソッドと同様の結果を得られます。
String 文字列 = ""; String 文字列2 = "テスト"; String 文字列3 = ""; System.out.println(文字列.length()); System.out.println(文字列.codePointCount(0, 文字列.length())); System.out.println(文字列2.length()); System.out.println(文字列2.codePointCount(0, 文字列2.length())); System.out.println(文字列3.length()); System.out.println(文字列3.codePointCount(0, 文字列3.length())); // 実行結果 0 0 3 3 2 1

Javaの記事の一覧はJava にまとめてあります