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

【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 にまとめてあります

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP