【Java】isEmptyで空かどうか確認する方法|nullの注意とisBlankの違い

【Java】データが空かどうかを確認する isEmptyメソッドの使い方 Java

isEmpty() は「空かどうか」を判定する便利なメソッドで、StringCollectionOptional などで使えます。ただしnullに対して呼ぶと例外になる落とし穴があり、空白のみの文字列は「空」とみなされない点にも注意が必要です。この記事で正しい使い方を解説します。

この記事の結論:空判定は str.isEmpty() / list.isEmpty() など。ただしnullに isEmpty() を呼ぶと NullPointerException になるので、str == null || str.isEmpty() のようにnull判定を先に。空白のみも弾くなら isBlank()(Java 11)です。
スポンサーリンク

文字列のisEmpty

String.isEmpty()長さが0のときに true を返します。

String.isEmpty
System.out.println("".isEmpty());      // true(長さ0)
System.out.println("Hello".isEmpty()); // false
System.out.println("   ".isEmpty());   // false(空白は「空」ではない)

要注意:nullにisEmpty()は例外になる

isEmpty() はメソッドなので、対象が null だと呼び出した瞬間に NullPointerException になります。null判定を先に書きましょう。

null安全に空判定する
String str = getValue(); // null かもしれない

// NG: str が null だと例外
// if (str.isEmpty()) { ... }

// OK: null判定を先に(|| は短絡評価なので安全)
if (str == null || str.isEmpty()) {
    System.out.println("未入力です");
}
|| は短絡評価なので、str == null が真ならその時点で確定し、右側の str.isEmpty() は評価されません。そのためnull判定を必ず左に書きます(逆だと例外になります)。null判定の詳細はnullを判定する方法を参照。

空白のみも弾く:isBlank(Java 11)

isEmpty()長さ0だけを「空」とみなすため、" "(スペースのみ)は false になります。スペースやタブだけの入力も「空」として弾きたいなら、Java 11以降の isBlank() を使います。

isEmpty と isBlank の違い
String s = "   "; // 空白のみ

System.out.println(s.isEmpty()); // false(長さは3)
System.out.println(s.isBlank()); // true(空白のみ → 空とみなす, Java 11+)
フォームの未入力チェックなどでは、全角スペースだけの入力も弾ける isBlank() が便利です。trim/strip と空判定の関係は空白のみの項目にtrimを適用したときの挙動も参考になります。

コレクションのisEmpty

ListSetMap などでも isEmpty() が使えます。要素が1つもなければ true です。size() == 0 より isEmpty() の方が意図が明確で読みやすくなります。

Collection.isEmpty
import java.util.*;

List<String> list = new ArrayList<>();
System.out.println(list.isEmpty()); // true

list.add("Element");
System.out.println(list.isEmpty()); // false
コレクションも null なら isEmpty() で例外になります。リスト要素を安全に扱う方法はリストの項目が空でないか確認して使う方法を参照してください。

OptionalのisEmpty(Java 11)

Java 11から Optional.isEmpty() も使えます。値を含まないとき true です(逆は isPresent())。

Optional.isEmpty
import java.util.Optional;

Optional<String> opt = Optional.empty();
System.out.println(opt.isEmpty());   // true
System.out.println(opt.isPresent()); // false

よくある質問(FAQ)

QisEmpty()でNullPointerExceptionが出ます。
A対象が null のまま isEmpty() を呼んだためです。str == null || str.isEmpty() のようにnull判定を先に書いてください。|| の短絡評価でnullなら右側は評価されず安全です。
QisEmptyとisBlankの違いは?
AisEmpty()長さ0だけを空とみなします。isBlank()(Java 11+)は空白だけの文字列も空とみなします。スペースやタブのみの入力も弾きたいなら isBlank() を使ってください。
Qsize() == 0 と isEmpty() はどちらが良いですか?
Aコレクションでは isEmpty()意図が明確で読みやすいため推奨です。一部の実装では isEmpty() の方が効率的な場合もあります。
Q配列にisEmptyはありますか?
Aありません。配列は arr.length == 0 で空判定します。isEmpty() は文字列・コレクション・Optionalなどのメソッドです。

まとめ

JavaのisEmptyのポイントを整理します。

  • 空判定は str.isEmpty() / list.isEmpty() / opt.isEmpty()
  • nullに呼ぶと例外str == null || str.isEmpty() でnull判定を先に
  • 空白のみも弾くなら isBlank()(Java 11+)
  • コレクションは size() == 0 より isEmpty() が読みやすい
  • 配列には isEmpty が無い → length == 0

関連として、nullを判定する方法空白のみの項目にtrimを適用したときの挙動リストの項目が空でないか確認して使う方法もあわせて読むと、Javaの空・null判定に強くなれます。