【Java】文字列と配列の長さを取得する方法|length()とlengthの違い

【Java】length()メソッドで文字列と配列の長さを取得する方法 Java

Javaでデータの長さ(文字数・要素数)を取得する書き方は、対象によって異なるのがポイントです。文字列は length()(メソッド)、配列は length(フィールド)、コレクションは size() と、それぞれ違います。この記事で正しい使い分けと、文字数を数えるときの注意点を解説します。

この記事の結論:文字列は str.length()(メソッド・カッコあり)、配列は arr.length(フィールド・カッコなし)、List/Set/Mapは col.size()。絵文字や一部の漢字では length() が見た目より大きくなる点に注意します。
スポンサーリンク

文字列の長さ:length() メソッド

文字列の文字数は length() メソッドで取得します。空白も1文字として数えます。

String.length()
String str = "Hello, World!";
System.out.println(str.length()); // 13(空白も含む)

配列の長さ:length フィールド

配列の要素数は length フィールドで取得します。カッコは付けません(メソッドではなくフィールド)。

配列.length(() なし)
int[] array = {1, 2, 3, 4, 5};
System.out.println(array.length); // 5

// 2次元配列は「行数」と「各行の列数」
int[][] grid = {{1, 2, 3}, {4, 5, 6}};
System.out.println(grid.length);    // 2(行数)
System.out.println(grid[0].length); // 3(1行目の列数)

length()・length・size()の違い

対象 書き方 種類
文字列(String) str.length() メソッド(()あり)
配列 arr.length フィールド(()なし)
List / Set / Map col.size() メソッド(()あり)
よくある間違い:配列に arr.length()(→エラー、フィールドなので()不要)、文字列に str.length(→エラー、メソッドなので()必要)。「配列だけ () なし」と覚えると混乱しません。
コレクション(List/Set/Map)の size() や空判定(isEmpty())の使い分けはサイズ・要素数の取得方法で詳しく解説しています。

注意:絵文字や一部の漢字でlength()が大きくなる

厳密には String.length() が返すのは「UTF-16のコード単位の数」であって「見た目の文字数」ではありません。絵文字や一部の珍しい漢字(基本多言語面の外にある文字)は1文字で2カウントされます(サロゲートペア)。

見た目の文字数を数える(codePointCount)
// 絵文字や一部の漢字は length() で 2 と数えられることがある
String emoji = "..."; // 例: 絵文字1個を含む文字列
// emoji.length();                         // 見た目より大きい値になる場合がある

// 「文字(コードポイント)の数」を数えるには codePointCount
int count = emoji.codePointCount(0, emoji.length());
System.out.println(count); // 見た目に近い文字数
通常の日本語(ひらがな・カタカナ・常用漢字など)は1文字=1カウントなのでlength() で問題ありません。絵文字や記号、珍しい漢字まで正確に数えたい場合のみ codePointCount() を使います。

長さ0(空)かどうかの判定

「空かどうか」を調べるなら、長さを0と比べるより isEmpty() が読みやすいです(文字列・コレクションで使えます。配列は length == 0)。

isEmptyで空判定
String s = "";
System.out.println(s.isEmpty()); // true

int[] arr = {};
System.out.println(arr.length == 0); // true(配列はisEmptyが無い)

よくある質問(FAQ)

Q文字列はlength、配列はlength()でしたっけ?
A逆です。文字列は length()(メソッド・カッコあり)配列は length(フィールド・カッコなし)です。List/Set/Mapは size() を使います。
Qlength()が見た目の文字数と合いません。
Alength()UTF-16のコード単位を数えるためです。絵文字や一部の珍しい漢字は1文字で2カウントされます。見た目の文字数は str.codePointCount(0, str.length()) で取得してください。
Q2次元配列の長さはどう取りますか?
Agrid.length行数grid[0].length1行目の列数です。行ごとに列数が異なる配列(ジャグ配列)もあるため、各行の長さは grid[i].length で個別に取得します。
Q空かどうかの判定は?
A文字列・コレクションは isEmpty() が読みやすく推奨です。配列には isEmpty() が無いので arr.length == 0 で判定します。

まとめ

Javaで長さを取得するポイントを整理します。

  • 文字列は length()(メソッド)、配列は length(フィールド)
  • List/Set/Mapは size()
  • 「配列だけ () なし」と覚える
  • 絵文字・一部の漢字は length() で2カウント → codePointCount() で見た目の文字数
  • 空判定は isEmpty()(配列は length == 0

関連として、サイズ・要素数の取得方法(size/length)文字列の末尾から任意の桁数を取得する方法リストが空でないか確認して使う方法もあわせて読むと、Javaの長さ・サイズ処理に強くなれます。