Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

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(末尾)を指定します。

note

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

文字列
文字列
length/codePointCountメソッド
isEmptyメソッド
charAtメソッド
indexOf/lastIndexOfメソッド
equals/equalsIgnoreCaseメソッド
regionMatchesメソッド
compareTo/compareToIgnoreCaseメソッド
trimメソッド
startsWith/endsWithメソッド
toLowerCase/toUpperCaseメソッド
substringメソッド
replaceメソッド
splitメソッド
joinメソッド
formatメソッド
appendメソッド

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職