length/codePointCountメソッド
文字列長を取得する – length/codePointCountメソッド- public int codePointCount(int begin, int end)
- public int length()
- begin:長さを求める範囲の開始位置
- end:終了位置
文字列の長さを取得するには、lengthメソッドを利用します。文字列はUnicode単位でカウントされますので、日本語(マルチバイト文字)を含んでいても正しくカウントできます。
StrLength.java
package com.example.mynavi.string; public class StrLength { public static void main(String[] args) { String str = "ALPHAプロジェクト"; System.out.println(str.length()); // 結果:11 } }
ただし、文字列にサロゲートペアが含まれる場合には正しい値になりません。その場合は、lengthメソッドの代わりに、codePointCountメソッドを利用してください。
StrCodePoint.java
package com.example.mynavi.string; public class StrCodePoint { public static void main(String[] args) { String str = "叱る"; System.out.println(str.length());; // 結果:3 System.out.println(str.codePointCount(0, str.length())); // 結果:2 } }
上の例では、「叱」はサロゲートペアです。そのため、lengthメソッドでは正しく文字数をカウントできていませんが、codePointAtメソッドでは正しく「2」とカウントできていることが確認できます。 codePointAtメソッドでは、文字列をカウントする際の開始/終了位置が必須なので、文字列全体をカウントするには、それぞれ0(先頭)、str.length(末尾)を指定します。
サロゲートペア
Unicode(UTF-16)では、通常、1文字を2バイトで表現します。しかし、Unicodeで扱うべき文字が増えるにつれ、2バイトで表現できる文字数(65535文字)では不足するようになりました。そこで、一部の文字を4バイトで表現することで、扱える文字数を増やすことになったわけです。このような文字のことをサロゲートペアと言います。