本ページはプロモーションが含まれています

Java入門

Java isBlank・isEmpty違い|空白判定の使い分け

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

「isEmpty() と isBlank() って何が違うの?」。検索でここに来た人の大半は、この一点でつまずいている。

答えは単純だ。isEmpty() は文字列の長さがゼロかどうかしか見ない。isBlank() は空白文字だけで構成されていないかまで見る。

だから " ".isEmpty() は false なのに " ".isBlank() は true になる。

この1文字の挙動差が、入力チェックのバグを生む。

結論から言えば、Java 11以降なら isBlank() を使うのが最も確実だ。ただし全角スペースやnullの扱いには別の落とし穴がある。

自分も駆け出しの頃、入力バリデーションで全角スペースに気づかず数時間デバッグしたことがある。

isEmpty()・isBlank()・trim() の違いと使い分けを、入力フォームやCSV処理での実装パターンまで、現場で使えるサンプルコード付きでまとめた。

この記事でわかること

  • isEmpty()・isBlank()・trim()の3つの使い分け
  • 全角スペースも含めた確実な空白判定のやり方
  • 入力フォームやファイル処理での実装パターン
  • Java 11のstrip()メソッドとtrim()の違い

空白(ホワイトスペース)とは?

Javaにおける空白(ホワイトスペース)の定義を示す図解

空白文字とは、半角スペース・全角スペース・タブ・改行など、Javaが「空白扱い」と認識する文字の総称である。スペース以外にも複数の種類が含まれる。

Javaにおける空白文字の定義

Javaでは、Character.isWhitespace(char ch) を使うと、その文字が"空白扱い"かどうかをチェックできます。

trueが返る文字が、Javaでいう「空白文字(ホワイトスペース)」です。

空白というと普通のスペースを思い浮かべますが、Javaではタブや改行なども空白文字として扱われます。

Unicodeで定義されたさまざまな"見えない文字"がまとめて空白文字として扱われます。

よく使われる空白文字の種類(スペース・タブ・改行)

日常的なプログラミングで遭遇する代表的な空白文字は、主に以下の3つです。

種類表現説明
スペースいわゆる半角スペース。単語の区切りなどに使われる。
タブ\t水平タブ文字。コードのインデントやテキストの位置揃えに利用される。
改行\n, \rテキストを新しい行に移動させるための文字。OSによって扱いが異なる。

スペース・タブ・改行は、画面上では何も表示されないか、あるいは単なる隙間にしか見えません。しかし、文字列データとして確実に存在します。

空白判定を正しく行わないと、バグの原因になります。

isEmpty・isBlank・trimの基本的な使い分け

isEmpty・isBlank・trimの基本的な使い分けを示す図解

isEmpty()isBlank()trim()はいずれも文字列の空判定に使うが、判定基準がそれぞれ異なる。以下、コード付きで違いを示す。

isEmpty()とisBlank()の違い|判定基準の差

isEmpty()とは、文字列の長さがゼロかどうかだけを判定するメソッドである。

isBlank()とは、文字列が空、または空白文字のみで構成されているかを判定するメソッドである。

isEmpty()isBlank() はどちらも文字列チェックに使うメソッドですが、判定するポイントが少し違います。

この違いを知っておくと、入力チェックでの判定ミスを防げます。

結論から言うと、文字列が「空っぽ」かどうかだけを知りたいならisEmpty()を使います。

「意味のある文字が一つもない」状態かを判定したいならisBlank()です。

isEmpty()

  • 文字列の長さが0かどうかを判定
  • " ".isEmpty()false を返す。なぜなら、半角スペース1つ分の長さ(1)があるから
  • "".isEmpty()true を返す

isBlank()

  • 文字列が空であるか、または空白文字のみで構成されているかを判定
  • " ".isBlank()true を返す。半角スペースしか含まれていないため
  • "".isBlank()true を返す

ユーザーがフォームで「スペースだけ入れて登録」みたいな、よくある"抜け道"を潰したい場合は isBlank() を使うのが正解

isEmpty() だとスペースが1個でも入っていれば false になってしまい、意図しない入力を通してしまいます。

trim() を使った空白削除と判定

Java 11より前ではString.isBlank()は使えません。

代わりによく使われるのが、trim()isEmpty()を組み合わせる方法です。

trim()メソッドは、文字列の前後にある「半角の空白(スペース・タブ・改行)」をまとめて削除するメソッドです。

String s1 = "  hello world  ";
String s2 = s1.trim(); // "hello world" になります

String s3 = "   ";
String s4 = s3.trim(); // "" (空文字列) になります

trim()の特性を使って、前後の空白を消し去った後、isEmpty()で長さが0になったかどうかをチェックすれば、isBlank()と同等の判定が実現できます。

str.trim().isEmpty()

trim().isEmpty()は便利ですが、注意点が1つあります。trim()が消せるのは半角の空白文字だけです。

全角スペースは残るため、" ".trim().isEmpty()falseになります。

strip()との違い|全角スペースも削除できる新メソッド

Java 11ではtrim()の上位互換としてstrip()メソッドが追加されました。

trim()' '以下の文字しか削除しないのに対し、strip()はUnicodeで定義された空白文字(全角スペース含む)をすべて削除します。

String s1 = " hello "; // 全角スペース

System.out.println(s1.trim());   // " hello "(全角スペースは残る)
System.out.println(s1.strip());  // "hello"(全角スペースも削除される)

// strip()を使った空白判定
String s2 = "   "; // 全角・半角混在
System.out.println(s2.strip().isEmpty()); // true

先頭だけ・末尾だけの空白を削除したい場合は、stripLeading()stripTrailing()も使えます。

Java 11以降であれば、trim()よりもstrip()を使う方が安全です。

isEmpty・isBlank・trim動作比較のサンプルコード

それでは、実際にコードで動作の違いを見てみましょう。

public class WhitespaceCheck {
    public static void main(String[] args) {
        String str1 = ""; // 空文字列
        String str2 = " "; // 半角スペース
        String str3 = " "; // 全角スペース
        String str4 = "\t \n"; // タブ、スペース、改行
        String str5 = "  Java  ";

        System.out.println("--- isEmpty() の結果 ---");
        System.out.println("str1(\"\"): " + str1.isEmpty()); // true
        System.out.println("str2(\" \"): " + str2.isEmpty()); // false
        System.out.println("str3(\" \"): " + str3.isEmpty()); // false
        System.out.println("str4(\"\\t \\n\"): " + str4.isEmpty()); // false
        System.out.println("str5(\"  Java  \"): " + str5.isEmpty()); // false

        System.out.println("\n--- isBlank() の結果 (Java 11以降) ---");
        System.out.println("str1(\"\"): " + str1.isBlank()); // true
        System.out.println("str2(\" \"): " + str2.isBlank()); // true
        System.out.println("str3(\" \"): " + str3.isBlank()); // true (全角スペースも判定)
        System.out.println("str4(\"\\t \\n\"): " + str4.isBlank()); // true
        System.out.println("str5(\"  Java  \"): " + str5.isBlank()); // false

        System.out.println("\n--- trim().isEmpty() の結果 ---");
        System.out.println("str1(\"\"): " + str1.trim().isEmpty()); // true
        System.out.println("str2(\" \"): " + str2.trim().isEmpty()); // true
        System.out.println("str3(\" \"): " + str3.trim().isEmpty()); // false (全角スペースは残る)
        System.out.println("str4(\"\\t \\n\"): " + str4.trim().isEmpty()); // true
        System.out.println("str5(\"  Java  \"): " + str5.trim().isEmpty()); // false
    }
}

実行結果から、isBlank()が最も直感的で強力な判定を行えることがわかります。

特に全角スペースまで正しく判定してくれる点は、日本語を扱うシステムでは非常に重要です。

StringUtils.isBlankと正規表現による応用的な空白判定

StringUtilsや正規表現など応用的な空白判定メソッドの一覧を示す図解

基本の3メソッドに加えて、StringUtils.isBlank()・StringUtils.isEmpty()・正規表現という3つの応用的な判定方法がある。

プロジェクトの環境や要件に応じて選択する。

StringUtils.isBlank()はどう使う?

Java 11より前(Java 8環境など)では、StringUtils.isBlank()が空白判定の定番でした。Java 8時代からのレガシープロジェクトや、既にApache Commons Langを導入済みの既存コードベースでは2026年現在も定番の選択肢です。外部ライブラリであるApache Commons Lang(2026年8月時点の最新安定版は3.20.0)に含まれています。

StringUtils.isBlank()の最大のメリットは、null を渡しても例外が発生しないことです。

Javaの標準 isBlank() は null を渡すと例外が発生します。

一方 StringUtils.isBlank() は true を返してくれるので安心です。

String str = null;

// 標準のisBlank()は例外が発生する
str.isBlank(); // -> NullPointerException

// StringUtils.isBlank()は安全
boolean result = org.apache.commons.lang3.StringUtils.isBlank(str); // trueが返る

null チェックをわざわざif (str != null && str.isBlank())のように書かなくて済むため、コードがすっきりします。

あわせて読む

StringUtils.isEmpty()との違い

StringUtils.isEmpty() は名前が似ているため isBlank() と混同しやすい。

ただし判定基準は標準の isEmpty() と同じで、空白文字だけの文字列は false になる。違うのは null の扱いだけだ。

org.apache.commons.lang3.StringUtils.isEmpty(null); // true(例外にならない)
org.apache.commons.lang3.StringUtils.isEmpty(" ");    // false(空白文字はカウントされる)
org.apache.commons.lang3.StringUtils.isEmpty("");     // true

nullも空白もまとめて弾きたいなら isBlank() 系、長さゼロかどうかだけを厳密に見たいなら isEmpty()、というのが両者の使い分けの軸になる。

String.isBlank()はどう使う?(Java 11以降)

Java 11(2018年リリース)から追加された、標準で使える便利メソッドです。外部ライブラリなしですぐに使える点が大きなメリットです。

ただし、StringUtils.isBlank() と違って null には対応していません(null-safeではない)

値が null になる可能性があるときは先にチェックしてください。

2026年8月時点でのJava最新LTSはJava 25です(Java 21・17・11も継続サポート対象)。

Java 11以降であればどのLTSでもString.isBlank()を第一選択肢として問題ありません。

正規表現で空白判定するにはどうする?

もう少し柔軟に「空白だけかどうか」を判定したいときは、正規表現が便利です。Javaで正規表現を使うなら、Pattern クラスや String.matches() を使うのが定番です。

空白だけの文字列を判定したい場合に使える有名どころのパターンが \s*です。

  • \s: スペース、タブ、改行などのあらゆる空白文字にマッチ
  • *: 直前の文字が0回以上繰り返されるという意味

つまり、\s*は「空白文字が0個以上続く文字列」にマッチします。(空白だけ、または完全に空文字でもOK)

import java.util.regex.Pattern;

public class RegexCheck {
    public static void main(String[] args) {
        String str1 = " ";
        String str2 = " "; // 全角スペース
        String str3 = "  \t  ";
        String str4 = "not blank";

        // パターンを定義
        Pattern pattern = Pattern.compile("\\s*");

        System.out.println("str1: " + pattern.matcher(str1).matches()); // true
        System.out.println("str2: " + pattern.matcher(str2).matches()); // true
        System.out.println("str3: " + pattern.matcher(str3).matches()); // true
        System.out.println("str4: " + pattern.matcher(str4).matches()); // false
    }
}

正規表現を使うと、全角スペースも含めて"空白なら全部OK"という判定ができます。

ただし、isBlank()のような専用メソッドに比べると処理が遅く、正規表現は慣れるまで学習コストがかかります。

単純な空白チェックだけなら isBlank() を使った方が手軽で扱いやすいです。

筆者が関わってきたプロジェクトでは、空白判定に正規表現を使っているコードをほぼ見たことがありません。

isBlank()StringUtils.isBlank()で十分対応できます。

正規表現はパフォーマンスコストも高いため、特殊な要件がない限り避けるのが実務的です。

ユースケース別の空白判定実装例

入力フォームやファイル処理などユースケース別の空白判定実装例を示す図解

空白判定は入力フォームのバリデーション、ファイル処理での空行除外、nullチェックとの組み合わせという3つの場面で実務的に使われる。

入力フォームのバリデーションで使う

Webアプリケーションで最も一般的な使い方です。ユーザーIDやパスワード、氏名などの入力が空や空白文字だけでないことを確認します。

// Java 11以降の場合
public boolean isUserIdValid(String userId) {
    // ユーザーIDがnullでもなく、空白だけでもないことを確認
    if (userId == null || userId.isBlank()) {
        System.out.println("エラー: ユーザーIDが入力されていません。");
        return false;
    }
    // ここに文字数や形式のチェック処理などを追加
    return true;
}

// Apache Commons Lang を使う場合
public boolean isPasswordValid(String password) {
    // StringUtils.isBlankはnull-safeなので、nullチェックが不要
    if (org.apache.commons.lang3.StringUtils.isBlank(password)) {
        System.out.println("エラー: パスワードが入力されていません。");
        return false;
    }
    return true;
}
あわせて読む

ログ出力・ファイル処理での空白チェック

CSVファイルや設定ファイルを読み込む際は、空行や不要な空白行を読み飛ばす必要がある。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.io.IOException;

public class FileReaderExample {
    public void processFile(String filePath) {
        try {
            List<String> lines = Files.readAllLines(Paths.get(filePath));
            for (String line : lines) {
                // 行が空白でない場合のみ処理を実行する
                if (!line.isBlank()) {
                    System.out.println("処理対象行: " + line);
                    // ここでCSVのパースなどの実処理を行う
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

isBlank()を使うことで、空行だけでなく、スペースやタブだけの行もきれいに無視できます。

あわせて読む

nullチェックとの組み合わせパターン

ここまでも触れてきましたが、nullチェックとの組み合わせは非常に重要です。改めてパターンを整理します。

筆者の経験上、空白判定でNullPointerExceptionが出るのは、nullチェックを忘れてisBlank()を直接呼び出すパターンが大半です。

特にフォームの任意入力項目やAPIからのレスポンスは、値がnullになる可能性を常に考慮しましょう。

あわせて読む

新人時代は、このNPEを1日10回以上出していた。

原因の大半はnullチェック漏れで、OptionalStringUtils のnull-safeメソッドを覚えてから頻度が激減した。

「NPEが多い人はOptionalを知らない」というのは、割とあるあるだと思う。

パターン1: 標準API (Java 11以降)

nullチェックとisBlank()を|| (OR) でつなぐのが定石です。

String input = ...; // どこかから来る入力値
if (input == null || input.isBlank()) {
    // エラー処理やデフォルト値の設定
}

パターン2: Apache Commons Lang

StringUtils.isBlank()だけでnullと空白の両方をチェックできます。コードがすっきりします。

String input = ...; // どこかから来る入力値
if (org.apache.commons.lang3.StringUtils.isBlank(input)) {
    // エラー処理やデフォルト値の設定
}

どちらのパターンも結果は同じですが、コードの読みやすさやプロジェクトの依存関係を考慮して選択してください。

よくある質問

Q1. isEmpty()とisBlank()の違いは何ですか?

A1. isEmpty()は文字列の長さがゼロかどうかだけを見ます。isBlank()は空白文字だけで構成されているかまで見ます。そのため" ".isEmpty()はfalseですが、" ".isBlank()はtrueになります。

Q2. Java 11より前のバージョンでisBlank()の代わりに使えるものは?

A2. trim().isEmpty()の組み合わせ、またはApache Commons LangのStringUtils.isBlank()が使えます。ただしtrim()は全角スペースを削除できない点に注意が必要です。

Q3. StringUtils.isBlank()とString.isBlank()の違いは何ですか?

A3. 判定基準は同じですが、null-safeかどうかが異なります。StringUtils.isBlank()はnullを渡してもtrueを返しますが、String.isBlank()はnullを渡すとNullPointerExceptionが発生します。

Q4. trim()とstrip()の違いは何ですか?

A4. trim()は半角スペース以下の文字しか削除できませんが、strip()はUnicodeで定義された空白文字(全角スペースを含む)をすべて削除できます。strip()はJava 11で追加されたメソッドです。

Q5. isBlank()にnullを渡すとどうなりますか?

A5. String.isBlank()はnullを渡すとNullPointerExceptionが発生します。nullの可能性がある値には、事前のnullチェックか、null-safeなStringUtils.isBlank()を使ってください。

Q6. 全角スペースだけの文字列はisEmpty()で判定できますか?

A6. できません。isEmpty()は文字列の長さしか見ないため、全角スペースが含まれていればfalseになります。全角スペースを含めて判定したい場合はisBlank()を使ってください。

Q7. 正規表現で空白判定するにはどうすればいいですか?

A7. Patternクラスで\s*パターンを使えば、全角スペースを含む空白判定ができます。ただしisBlank()より処理が遅く学習コストもかかるため、特殊な要件がない限りisBlank()の利用を推奨します。

まとめ:Java空白判定メソッドの選び方

Javaでの空白判定は、目的に応じて適切なメソッドを選ぶことが、バグが少なく保守性の高いコードを書くための鍵です。

簡易的な判定にはisBlank()

Java 11以降なら、String.isBlank()が最も手軽で強力です。外部ライブラリが不要で、全角スペースを含む空白文字も正しく判定できます。

ユーザー入力のチェックをはじめ、入力バリデーション全般で役立ちます。迷ったらisBlank()を選びましょう。

より厳密な処理には正規表現や外部ライブラリ

Java 8(2026年現在は既に無償公開アップデートが終了)などのレガシー環境では、StringUtils.isBlank()が有効です。

nullを安全に扱いたい場合も同様で、nullチェックを省略でき、コードがすっきりします。

また、「文字列の途中にある空白は許すが、先頭と末尾の空白だけをチェックしたい」といった複雑なルールが必要な場合は、正規表現を使います。

保守性を考えた実装ポイント

最も重要なのはプロジェクト内で判定方法を統一することです。

「空白判定にはString.isBlank()を使う」のようなルールをチーム内で決めておきましょう。

コードのばらつきが減り、メンテナンスしやすくなります。ルールを決めれば、レビューもスムーズになります。

メモ:迷ったときの選び方

Java 11以降が使えるならString.isBlank()、null-safeにしたいならStringUtils.isBlank()、Java 11未満のレガシー環境ならtrim().isEmpty()を選ぶのが基本です。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

-Java入門