注目記事

【Javaコード入門】文字列_②length/codePointCountメソッド

文字列長を取得する – length/codePointCountメソッド

public int codePointCount(int begin, int end)
public int length()
 begin:長さを求める範囲の開始位置
 end:終了位置

文字列の長さを取得するには、lengthメソッドを利用します。文字列はUnicode単位でカウントされますので、日本語(マルチバイト文字)を含んでいても正しくカウントできます。

StrLength.java

  1. package com.example.mynavi.string;
  2.  
  3. public class StrLength {
  4.   public static void main(String args) {
  5.     var str = "ALPHAプロジェクト";
  6.     System.out.println(str.length());   // 結果:11
  7.   }
  8. }

ただし、文字列にサロゲートペアが含まれる場合には正しい値になりません。その場合は、lengthメソッドの代わりに、codePointCountメソッドを利用してください。

StrCodePoint.java

  1. package com.example.mynavi.string;
  2.  
  3. public class StrCodePoint {
  4.   public static void main(String args) {
  5.     var str = "叱る";
  6.     System.out.println(str.length());;  // 結果:3
  7.     System.out.println(str.codePointCount(0, str.length()));    // 結果:2
  8.   }
  9. }

上の例では、「叱」はサロゲートペアです。そのため、lengthメソッドでは正しく文字数をカウントできていませんが、codePointAtメソッドでは正しく「2」とカウントできていることが確認できます。 codePointAtメソッドでは、文字列をカウントする際の開始/終了位置が必須なので、文字列全体をカウントするには、それぞれ0(先頭)、str.length(末尾)を指定します。

 

サロゲートペア
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メソッド

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。