【Java学習|実務向け】Javaにおける文字列判定の最適解:isEmptyとisBlankの使い分けと現場の勘所

導入

Java開発において、文字列が「空であるか」を判定する処理は最も頻繁に発生する実装の一つです。しかし、Java 11で導入されたisBlank()と、古くからあるisEmpty()のどちらを使うべきか迷うことはありませんか?不適切な判定は、不要な空白データが混入するバグや、バリデーション漏れの原因となります。本記事では、これらを正しく使い分け、堅牢なコードを書くための実践的なTipsを解説します。

基礎知識

まず、それぞれのメソッドの挙動を正しく理解しましょう。

isEmpty()
文字列の長さが0であるか(length() == 0)を判定します。つまり、半角スペースやタブなどの「空白文字」が含まれている場合は、falseを返します。

isBlank()
Java 11から導入されました。文字列が空であるか、または「空白文字のみ」で構成されている場合にtrueを返します。内部的にはCharacter.isWhitespace()を使用して判定されます。

実装/解決策

実務における使い分けの基準は、「その文字列に空白が含まれていても許容するか」にあります。

isEmpty()を使う場面
ユーザー入力において「スペースも一つの文字として扱う(例:パスワードやコード)」場合や、単に「文字が一つも存在しないこと」を保証したい場合。

isBlank()を使う場面
名前、住所、メールアドレスなど、人間が入力するフィールドにおいて「スペースのみの入力は無効(実質的に値がない)」と見なしたい場合。現場ではこちらの使用頻度の方が圧倒的に高いはずです。

サンプルプログラム

以下のコードをコピーして動作を確認してみてください。

public class StringValidationExample {
public static void main(String[] args) {
String emptyStr = “”;
String blankStr = ” “; // 半角スペース3つ
String normalStr = ” Java “;

// isEmptyの挙動
System.out.println(“— isEmpty —“);
System.out.println(“空文字: ” + emptyStr.isEmpty()); // true
System.out.println(“空白文字: ” + blankStr.isEmpty()); // false (空白は文字とみなす)

// isBlankの挙動
System.out.println(“\n— isBlank —“);
System.out.println(“空文字: ” + blankStr.isBlank()); // true
System.out.println(“空白文字: ” + blankStr.isBlank()); // true (空白のみは空とみなす)

// 実務でよくあるバリデーション例
String input = ” “;
if (input != null && input.isBlank()) {
// 文字列がnullでなく、かつ実質的に空である場合の処理
System.out.println(“\nエラー: 入力値が空です。”);
}
}
}

応用・注意点

現場で陥りやすい注意点が3つあります。

1. NullPointerExceptionの回避
isBlank()やisEmpty()を呼び出す前に、必ずnullチェックが必要です。モダンな開発では、Apache Commons LangのStringUtils.isBlank(str)を使用すると、nullチェックと空文字判定を一度に行えるため、コードの可読性が向上し安全です。

2. レコード(Records)での利用
Javaのレコード(Record)でバリデーションを行う際、コンストラクタ内でisBlank()を使用すると、インスタンス生成時に不正なデータを弾くことができます。

3. トリム(trim)との違い
かつては「str.trim().isEmpty()」という書き方が一般的でしたが、これは新しいStringインスタンスを生成するためメモリ効率が悪いです。Java 11以降であれば、isBlank()を使用することで、メモリ効率と可読性の両方を向上させることが可能です。

まずはプロジェクトのJavaバージョンを確認し、可能であれば積極的にisBlank()への移行を検討してください。

コメント

タイトルとURLをコピーしました