JavaのStringクラスには、文字列が空であるかどうかを確認するためのメソッドとしてisEmpty()とisBlank()があります。これらは似ていますが、確認する「空」の定義に重要な違いがあります。
String.isEmpty() の特徴 (Java 6以降)
-
定義: 文字列の長さがゼロであるかどうかをチェックします。
-
戻り値: 文字列に文字が一つも含まれていない場合に
trueを返します。 -
挙動: 空白文字(スペース、タブ、改行など)が含まれている場合、その文字列の長さはゼロではないため
falseを返します。 -
使用例: 絶対に文字を含まない空文字列 (
"") のみを検出したい場合に利用します。
| 文字列 (str) | 長さ (str.length()) | str.isEmpty() の結果 |
|---|---|---|
| "" (空文字列) | 0 | true |
| " " (スペース1つ) | 1 | false |
| " \t " (空白文字のみ) | 4 | false |
| "Hello" | 5 | false |
String.isBlank() の特徴 (Java 11以降)
-
定義: 文字列が空である、または空白文字のみで構成されているかどうかをチェックします。
-
戻り値: 文字列に文字が一つも含まれていない、または含まれている文字がすべて空白文字(スペース、タブ、改行コードなど)である場合に
trueを返します。 -
挙動:
isEmpty()よりも広範な「実質的に内容がない」状態を検出します。内部的には、文字列内に空白文字ではない文字が一つでも存在するかをチェックしています。 -
使用例: ユーザーからの入力チェックなどで、「何も入力されていない」状態や「スペースしか入力されていない」状態(ブランク)をまとめて検出したい場合に利用します。
| 文字列 (str) | str.isEmpty() の結果 | str.isBlank() の結果 |
|---|---|---|
| "" (空文字列) | true | true |
| " " (スペース1つ) | false | true |
| " \t " (空白文字のみ) | false | true |
| "Hello" | false | false |
💡 違いのまとめと使い分け
| 項目 | isEmpty() | isBlank() |
|---|---|---|
| Java導入バージョン | Java 6 | Java 11 |
| チェック内容 | 長さがゼロか (str.length() == 0) | 長さがゼロか、または空白文字のみか |
| 空白文字の扱い | 空白文字があれば false | 空白文字のみなら true |
| 適用ケース | 厳密に空文字列 ("") のみを判定したい場合 | 実質的な内容がない(空またはブランク)かを判定したい場合 |
| Java 8以前の代替手段 | なし | str.trim().isEmpty() が同等の機能を提供 |
isBlank() は、それまでのJavaでstr.trim().isEmpty()のように、前後の空白を取り除いてから空文字かを判定していた処理を、より簡潔かつ効率的に置き換えるために導入されました。
したがって、文字列が実質的な情報を持っていないかを判定したい場合は isBlank() を使うのが最も適切です。
