「Javaで入力チェックしたいんだけど、空白ってどう判定するのが正解なんだろ?」
「isEmpty() と isBlank() の違いがよくわからない…」
「全角スペースでハマってバグった……」
Javaの空白判定には isEmpty()・isBlank()・trim() の3つの方法がありますが、結論から言えば Java 11以降なら isBlank() を使うのが最も確実です。ただし、全角スペースやnullの扱いには落とし穴があります。
自分も駆け出しの頃、入力バリデーションで全角スペースに気づかず数時間デバッグしたことがあります。この記事では、3つの判定方法の違い・使い分けから、入力フォームやCSV処理での実装パターンまで、現場で使えるサンプルコード付きで解説します。
空白(ホワイトスペース)とは?

まず「そもそも空白とは?」という話から整理しておきます。空白というとスペースのイメージですが、プログラム的にはもっといろいろ含まれます。
Javaにおける空白文字の定義
Javaでは、Character.isWhitespace(char ch) を使うと、その文字が"空白扱い"かどうかをチェックできます。trueが返る文字が、Javaでいう「空白文字(ホワイトスペース)」です。
空白というと普通のスペースを思い浮かべますが、Javaではタブや改行なども空白文字として扱われます。Unicodeで決められたさまざまな"見えない文字"がセットになっているイメージです。
よく使われる空白文字の種類(スペース・タブ・改行)
日常的なプログラミングで遭遇する代表的な空白文字は、主に以下の3つです。
| 種類 | 表現 | 説明 |
| スペース | いわゆる半角スペース。単語の区切りなどに使われる。 | |
| タブ | \t | 水平タブ文字。コードのインデントやテキストの位置揃えに利用される。 |
| 改行 | \n, \r | テキストを新しい行に移動させるための文字。OSによって扱いが異なる。 |
スペース・タブ・改行は、画面上では何も表示されないか、あるいは単なる隙間にしか見えません。しかし、文字列データとして確実に存在します。空白判定を正しく行わないと、予期しないバグにつながります。
空白判定の基本|isEmpty()・isBlank()・trim()の使い分け

空白判定でよく使う isEmpty()・isBlank()・trim() の違いを、コード付きで紹介します。
isEmpty() と isBlank() の違い
isEmpty() と isBlank() はどちらも文字列チェックに使うメソッドですが、判定するポイントが少し違います。この違いを知っておくと、入力チェックでの判定ミスを防げます。
結論から言うと、文字列が「空っぽ」かどうかだけを知りたいならisEmpty()を、「意味のある文字が一つもない」状態かを判定したいならisBlank()を使います。
ユーザーがフォームで「スペースだけ入れて登録」みたいな、よくある"抜け道"を潰したい場合は 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の新メソッド
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()や正規表現など応用的な空白判定メソッド

基本的な方法に加えて、より確実で便利な判定処理を実現するための代表的なメソッドを3つ紹介します。プロジェクトの環境や要件に応じて最適なものを選択してください。
StringUtils.isBlank()(Apache Commons Lang)
Java 11より前(Java 8環境など)では、StringUtils.isBlank()が空白判定の定番でした。2026年現在もレガシープロジェクトや既存コードベースで広く使われています。外部ライブラリであるApache Commons Langに含まれています。
このメソッドの最大のメリットは、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())のように書かなくて済むため、コードがすっきりします。
String.isBlank()(Java 11以降)
Java 11(2018年リリース)から追加された、標準で使える便利メソッドです。外部ライブラリなしですぐに使える点が大きなメリットです。
ただし、StringUtils.isBlank() と違って null には対応していない(null-safeではない) ので、値が null になる可能性があるときは先にチェックしておく必要があります。
2026年現在、Java 11以降はほぼすべてのプロジェクトで使えるため、String.isBlank() を第一選択肢として問題ありません。
Patternを使った正規表現での判定方法
もう少し柔軟に「空白だけかどうか」を判定したいときは、正規表現が便利です。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()で十分対応でき、正規表現はパフォーマンスコストも高いため、特殊な要件がない限り避けるのが実務的です。
ユースケース別の空白判定実装例

実務で空白判定がよく使われる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になる可能性を常に考慮しましょう。
パターン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)) {
// エラー処理やデフォルト値の設定
}どちらのパターンも結果は同じですが、コードの読みやすさやプロジェクトの依存関係を考慮して選択してください。
まとめ:Java空白判定メソッドの選び方
Javaでの空白判定は、目的に応じて適切なメソッドを選ぶことが、バグが少なく保守性の高いコードを書くための鍵です。
簡易的な判定にはisBlank()
Java 11以降なら、String.isBlank()が最も手軽で強力です。外部ライブラリが不要で、全角スペースを含む空白文字も正しく判定できます。ユーザー入力のチェックなど、多くのケースで役立ちます。迷ったらisBlank()を選びましょう。
より厳密な処理には正規表現や外部ライブラリ
Java 8などのレガシー環境や、nullを安全に扱いたい場合はStringUtils.isBlank()が有効です。nullチェックを省略でき、コードがすっきりします。
また、「文字列の途中にある空白は許すが、先頭と末尾の空白だけをチェックしたい」といった複雑なルールが必要な場合は、正規表現の利用を検討しましょう。
保守性を考えた実装ポイント
最も重要なのはプロジェクト内で判定方法を統一することです。
「空白判定にはString.isBlank()を使う」のようなルールをチーム内で決めておきましょう。コードのばらつきが減り、メンテナンスしやすくなります。ルールを決めれば、レビューもスムーズになります。
