isEmpty() と isBlank() の違いは、空白だけの文字列を「空」とみなすかどうかです。" ".isEmpty() は false、" ".isBlank()(Java 11以降)は true を返します。
入力チェックは isBlank() が基本です。ただし null を渡すと例外(NPE)になり、Webからコピーした は isBlank() でも空白扱いされません。
null が来うる値は、isBlank() の前に null を弾いておく必要があります。null の扱い方はJava Nullableとは?null判定・NPE対策にまとめました。
見落としやすいのが全角スペースです。画面では半角と見分けにくく、trim() では消えないので、古い書き方の入力チェックをすり抜けます。
早見表のあとに、strip()・StringUtilsとの違いと実装例をまとめました。空白の削除・区切り・空白埋めの書き方は、記事の後半にあります。
この記事でわかること
- isEmpty()・isBlank()・trim()の3つの使い分け
- 全角スペースも含めた確実な空白判定のやり方
- isBlank()でも空白と判定されない文字( ・ゼロ幅スペース)
- 入力フォームやファイル処理での実装パターン
- Java 11のstrip()メソッドとtrim()の違い
PARTS LIST /目次
isEmptyとisBlankの違い早見表
入力値ごとの戻り値を表にまとめました。違いが出るのは空白だけの文字列・全角スペース・nullの3パターンです。逆にノーブレークスペース( )はどの方法でも空白と判定されません(結果はJDK 23で実行して確認)。
「スペースだけの入力を弾きたい」なら isBlank()、「null も一緒に弾きたい」なら StringUtils.isBlank() か null チェックとの併用、と覚えておけば迷いません。
Javaの空白(ホワイトスペース)とは?
空白文字とは、半角スペース・全角スペース・タブ・改行など、Javaが「空白扱い」と認識する文字の総称です。スペース以外にも複数の種類が含まれる。
Javaにおける空白文字の定義
Javaでは、Character.isWhitespace(char ch) を使うと、その文字が"空白扱い"かどうかをチェックできます。
trueが返る文字が、Javaでいう「空白文字(ホワイトスペース)」です。
ただし、見えない文字がすべて空白扱いになるわけではありません。ノーブレークスペース( )やゼロ幅スペースは Character.isWhitespace() が false を返すため、isBlank() でも空白と判定されません(後述)。
よく使われる空白文字の種類
日常的なプログラミングで遭遇する代表的な空白文字は、主に以下の3つです。
スペース・タブ・改行は、画面上では何も表示されないか、あるいは単なる隙間にしか見えません。しかし、文字列データとして確実に存在します。
判定を誤ると、スペースだけの氏名がそのまま登録されるといったバグにつながります。
isEmpty・isBlank・trimの基本的な使い分け
isEmpty()・isBlank()・trim()はいずれも文字列の空判定に使いますが、判定基準がそれぞれ異なります。以下、コード付きで違いを示す。
isEmpty()長さが0かだけを見る(中身は見ない)trim().isEmpty()両端のU+0020以下を削ってから長さを見るisBlank()1文字ずつ空白文字(Character.isWhitespace)かを調べる"" は3つとも true、" a " のように空白でない文字が1つでもあれば3つとも false。null を渡すと3つとも NullPointerExceptionになるので、先に null チェックするか StringUtils.isBlank()(null で true)を使う。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()で長さを調べれば、isBlank()に近い判定ができます。
str.trim().isEmpty()
trim().isEmpty()は便利ですが、注意点が1つあります。trim()が消せるのは半角の空白文字だけです。
全角スペースは残るため、" ".trim().isEmpty()はfalseになります。
strip()との違い|全角対応
Java 11ではtrim()の上位互換としてstrip()メソッドが追加されました。
trim()が削除するのは' '(U+0020)以下の文字だけです。
strip()は、Character.isWhitespace() が true を返す文字(全角スペースを含む)をすべて削除します。
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()を使う方が安全です。
isBlank()でも空白と判定されない文字
isBlank() と strip() が空白とみなすのは、Character.isWhitespace() が true を返す文字だけです(String クラスの Javadoc に明記されています)。そのため、見た目は空白でも判定をすり抜ける文字があります。
- ノーブレークスペース(U+00A0):HTMLの
。Webページからコピーした文字列に混ざりやすい - ゼロ幅スペース(U+200B):幅を持たない文字で、画面ではまったく見えない
String nbsp = "\u00A0"; // ノーブレークスペース(HTMLの )
String zwsp = "\u200B"; // ゼロ幅スペース
System.out.println(nbsp.isBlank()); // false
System.out.println(zwsp.isBlank()); // false
System.out.println(nbsp.strip().isEmpty()); // false(strip()でも消えない)
// 判定の前に、通常のスペースへ置き換えておく
String cleaned = nbsp.replace('\u00A0', ' ').replace("\u200B", "");
System.out.println(cleaned.isBlank()); // true
コピー&ペーストされた入力や、Webから取得した文字列を判定するときは、先に置き換えてから isBlank() を呼ぶと取りこぼしを防げます。StringUtils.isBlank() も同じ Character.isWhitespace() を基準にしているため、結果は変わりません。
isEmpty・isBlank・trim動作比較のサンプルコード
5種類の文字列に対して3つの判定方法を実行し、結果を並べました。
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()だけです。
特に全角スペースまで正しく判定できる点は、日本語を扱うシステムでは差が出るポイントです。
応用的な空白判定の方法
基本の3メソッドに加えて、StringUtils.isBlank()・StringUtils.isEmpty()・正規表現という3つの応用的な判定方法があります。
StringUtils.isBlank()はどう使う?
Java 11より前(Java 8環境など)では、StringUtils.isBlank()が空白判定の定番でした。Java 8時代からのレガシープロジェクトや、Apache Commons Langを導入済みのコードでは2026年現在もよく使われます。
StringUtilsは外部ライブラリである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()の使い方とnullの注意点
Java 11(2018年リリース)から追加された、標準で使える便利メソッドです。外部ライブラリなしですぐに使える点が大きなメリットです。
ただし、StringUtils.isBlank() と違って null には対応していません(null-safeではない)。
値が null になる可能性があるときは先にチェックしてください。
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()); // false(\sは既定で全角スペースにマッチしない)
System.out.println("str3: " + pattern.matcher(str3).matches()); // true
System.out.println("str4: " + pattern.matcher(str4).matches()); // false
}
}
Javaの\sは、既定では半角スペース・タブ・改行などASCIIの空白にしかマッチしない。全角スペースは false になる点に注意したい。
全角スペースも空白として扱いたいときは、Pattern.UNICODE_CHARACTER_CLASS を指定します。
// 全角スペースも空白として扱いたい場合はUNICODE_CHARACTER_CLASSを指定する
Pattern unicodePattern = Pattern.compile("\\s*", Pattern.UNICODE_CHARACTER_CLASS);
System.out.println(unicodePattern.matcher(" ").matches()); // true
ただし、isBlank()のような専用メソッドに比べると処理が遅く、正規表現は慣れるまで学習コストがかかります。
単純な空白チェックだけなら isBlank() を使った方が手軽で扱いやすいです。
空白判定だけなら、正規表現を持ち出さなくても isBlank() や StringUtils.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チェックを忘れると実行時エラーになるため、書き方を2パターンに整理します。
空白判定でNullPointerExceptionが出るのは、nullチェックを忘れてisBlank()を直接呼び出すパターンが大半です。
特にフォームの任意入力項目やAPIからのレスポンスは、値がnullになる可能性を常に考慮しましょう。
パターン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)) {
// エラー処理やデフォルト値の設定
}
どちらのパターンも結果は同じですが、コードの読みやすさやプロジェクトの依存関係を考えて選んでください。
空白を削除・区切る・桁をそろえる書き方
空白を判定するのではなく削除したいときは、前後だけなら strip()、文字列の途中も含めて全部なら replaceAll() を使います。
String s = " 山田\u3000太郎 "; // 前後に半角、途中に全角スペース
System.out.println("[" + s.strip() + "]"); // [山田 太郎](前後だけ削除)
System.out.println("[" + s.replaceAll("[\\s\u3000]", "") + "]"); // [山田太郎](途中も含めて全部削除)
trim() では全角スペースが残ります。trim() と strip() の違いは「strip()との違い」で詳しく扱いました。
判定や削除のほかに、空白で区切る・空白を入れて桁をそろえる場面もよくあります。空白区切りの文字列を配列にするなら split("\\s+")、空白を足して桁をそろえるなら String.format() か " ".repeat(n)(Java 11以降)を使います。
String line = "りんご みかん\tぶどう"; // 半角2つ・タブ区切り
String[] items = line.split("\\s+"); // 連続する空白をまとめて区切りにする
System.out.println(items.length); // 3
System.out.println("[" + String.format("%-6s", "Java") + "]"); // [Java ](右に空白を足して6桁に)
System.out.println("[" + String.format("%6s", "Java") + "]"); // [ Java](左に空白を足して6桁に)
System.out.println("[" + " ".repeat(3) + "Java]"); // [ Java](空白3つ。Java 11以降)
先頭に空白があると、split() の最初の要素が空文字になります(" a b".split("\\s+") は [, a, b])。先に strip() してから区切れば防げます。
よくある質問
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()はCharacter.isWhitespace()がtrueを返す文字(全角スペースを含む)をすべて削除できます。ただしノーブレークスペース(U+00A0)のようにisWhitespace()がfalseの文字は削除できません。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*パターンを使えば空白判定ができます。ただし既定では全角スペースにマッチしないため、全角も含めるならPattern.UNICODE_CHARACTER_CLASSを指定します。ただしisBlank()より処理が遅く学習コストもかかるため、特殊な要件がない限りisBlank()の利用を推奨します。
まとめ:Java空白判定メソッドの選び方
空白判定のメソッドは「Javaのバージョン」と「nullが来るかどうか」の2点で決まります。
どのメソッドを使うかの判断を図にすると、次のようになります。
isEmpty()長さ0の文字列だけを空とみなすstr == null || str.isBlank()または StringUtils.isBlank()(null で true)StringUtils.isBlank()null を渡しても例外にならず truetrim().isEmpty()Java 11未満・ライブラリなしの代替簡易的な判定にはisBlank()
Java 11以降なら、String.isBlank()が最も手軽です。外部ライブラリが不要で、全角スペースを含む空白文字も正しく判定できます。
ユーザー入力のチェックをはじめ、入力バリデーション全般で役立ちます。迷ったらisBlank()を選びましょう。
より厳密な処理には正規表現や外部ライブラリ
Java 8(Amazon Corretto や Eclipse Temurin の無償ビルドは2030年末まで更新が続くが、新規採用には向かない)などのレガシー環境では、StringUtils.isBlank()が有効です。
nullを安全に扱いたい場合も同様で、nullチェックを省略でき、コードがすっきりします。
また、「文字列の途中にある空白は許すが、先頭と末尾の空白だけをチェックしたい」といった複雑なルールが必要な場合は、正規表現を使います。
保守性を考えた実装ポイント
プロジェクト内では判定方法を統一してください。
「空白判定にはString.isBlank()を使う」のようなルールをチーム内で決めておきましょう。
コードのばらつきが減り、メンテナンスしやすくなります。決めておけば、レビューもスムーズになります。
メモ:迷ったときの選び方
Java 11以降が使えるならString.isBlank()、null-safeにしたいならStringUtils.isBlank()、Java 11未満のレガシー環境ならtrim().isEmpty()を選ぶのが基本です。
trim().isEmpty() を検索して、isBlank() に置き換えられるか見てみてください。Java 11以降なら、全角スペースも空白として判定できるようになります。null が来る箇所だけは、先に null チェックを入れます。
続きを追う:X(@Tom_Java_Tech) / RSS
途中経過は、また書きます。
| REV. | DATE | 内容 |
|---|---|---|
| 8 | 2026-10-28 | 文体をそろえ、空白の削除・区切りの書き方を後半にまとめた |
| 7 | 2026-10-21 | 一部の体験談を一般的な説明に改め、同じ説明の繰り返しを減らした |
| 6 | 2026-10-15 | 図解を描き直し(図面のデザインにそろえた) |
| 5 | 2026-10-14 | 一人称と言い回しの表記をそろえた |
| … ほか3回の改訂 | ||
| 1 | 2025-07-05 | 初版 |



