JavaのisEmpty()とisBlank()の違いを丁寧に解説!〜初心者がつまずかないために〜

こんにちは。ゆうせいです。

今回はJavaで文字列を扱うときに非常によく使う2つのメソッド、
isEmpty()isBlank()の違いについて解説していきます。

どちらも「空っぽかどうか」をチェックするものですが、
実は判定の中身がけっこう違うんです。

「何が違うの?」「どう使い分ければいいの?」という疑問に、わかりやすくお答えします!


結論をざっくり先に!

メソッド空文字 ("") を空と判定?空白文字(例: " ")も空と判定?対応バージョン
isEmpty()〇(true)✕(false)Java 6以降
isBlank()〇(true)〇(true)Java 11以降

つまり、

  • isEmpty()は「文字が1文字も入っていないとき」にだけtrueを返す
  • isBlank()は「空文字空白だけの文字列でもtrueを返す」

まずは isEmpty() の動きを確認!

概要:

boolean isEmpty = str.isEmpty();

このメソッドは、文字列の長さが0かどうかを判定します。つまり "".length() == 0 なら true を返します。

判定例:

isEmpty() の結果
""true
" "false
"abc"false
null例外(NullPointerException)

注意点:

文字列が null の場合はエラーになる ので、先に null チェックが必要です!

if (str != null && str.isEmpty()) {
    // OK
}

つぎに isBlank() を見てみよう!

概要:

boolean isBlank = str.isBlank();

このメソッドは、空文字または空白だけの文字列かどうかを判定します。
空白には スペース、タブ、改行などのホワイトスペースも含まれます。

判定例:

isBlank() の結果
""true
" "true
"\t"true
"\n "true
"abc"false
null例外(NullPointerException)

つまり、見た目には「何も書いてない」ように見える文字列も、isBlank() なら全部まとめて「空」と判定してくれます。


isEmpty()isBlank()の違いを例で見てみよう!

実行コード:

public class BlankVsEmptyCheck {
    public static void main(String[] args) {
        String[] testStrings = { "", " ", "\t", "\n", "abc", null };

        for (String str : testStrings) {
            System.out.println("-----");
            System.out.println("対象: " + str);
            if (str != null) {
                System.out.println("isEmpty(): " + str.isEmpty());
                System.out.println("isBlank(): " + str.isBlank());
            } else {
                System.out.println("nullなのでチェック不可");
            }
        }
    }
}

出力結果:

-----
対象: 
isEmpty(): true
isBlank(): true
-----
対象:  
isEmpty(): false
isBlank(): true
-----
対象: 	
isEmpty(): false
isBlank(): true
-----
対象: 

isEmpty(): false
isBlank(): true
-----
対象: abc
isEmpty(): false
isBlank(): false
-----
対象: null
nullなのでチェック不可

どっちを使えばいいの?使い分けのポイント!

状況使うべきメソッド
文字列が完全に空(0文字)か調べたいisEmpty()
空白しか入っていない場合も「空」としたいisBlank()(Java 11〜)
Java 11より前のバージョンを使っているisEmpty() + 空白除去

Java 8以前で isBlank() と同じことをしたい場合:

str.trim().isEmpty()

trim() は文字列の前後の空白を除去するので、見た目に空っぽならtrueになります。


補足:どちらもnullには注意!

どちらのメソッドも、対象の文字列が null の場合は例外(NullPointerExceptionが発生します。

なので、安全なコードを書くにはこうしましょう:

if (str != null && str.isBlank()) {
    // 空白または空文字のときの処理
}

まとめ

  • isEmpty()0文字かどうか を判定
  • isBlank()空白文字だけの文字列も含めて 判定
  • isBlank()Java 11以降で使用可能
  • null に対しては どちらもエラーになる ため、事前チェックが必要

次の学習ステップ

この違いを押さえたら、次は次のような内容に進んでみましょう!

  • trim()strip() の違い(前後の空白除去に関するメソッド)
  • StringUtils.isBlank()(Apache Commonsの便利メソッド)
  • null安全な文字列処理のベストプラクティス
  • 正規表現を使った文字列検査

文字列操作の理解が深まると、データの前処理や入力チェックの精度がぐっと上がります!一歩ずつ身につけていきましょう!


セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。