1. 序章

In this tutorial, we’ll discuss some ways of checking for empty or blank strings in Java. There are some native language approaches, as well as a couple of libraries.

2. 空対。 空欄

Of course, it’s pretty common to know when a string is empty or blank, but let’s make sure we’re on the same page with our definitions.

文字列がnullであるか、 any の長さのない文字列である場合、その文字列はemptyであると見なされます。 If a string only consists of whitespace, then we call it blank.

For Java, whitespaces are characters, like spaces, tabs, and so on. We can check out Character.isWhitespace for examples.

3. 空の文字列

3.1. Java6以降の場合

If we’re at least on Java 6, then the simplest way to check for an empty string is String#isEmpty:

boolean isEmptyString(String string) {
    return string.isEmpty();
}

nullセーフにするために、追加のチェックを追加する必要があります。

boolean isEmptyString(String string) {
    return string == null || string.isEmpty();
}

3.2. Java5以下の場合

String#isEmptyはJava6で導入されました。 For Java 5 and below, we can use String#length instead:

boolean isEmptyString(String string) {
    return string == null || string.length() == 0;
}

実際、 String#isEmptyはString#lengthへのショートカットにすぎません。

4. 空白の文字列

String#isEmptyString#length の両方を使用して、empty文字列をチェックできます。

blank 文字列も検出する場合は、 String#trimを使用してこれを実現できます。 It’ll remove all leading and trailing whitespaces before performing the check:

boolean isBlankString(String string) {
    return string == null || string.trim().isEmpty();
}

正確には、 String#trim は、UnicodeコードがU+0020以下のすべての先頭文字と末尾文字を削除します。

And also, remember that Strings are immutable, so calling trim won’t actually change the underlying string.

上記のアプローチに加えて、 Java 11以降、トリミングの代わりにisBlank()メソッドを使用することもできます。

boolean isBlankString(String string) {
    return string == null || string.isBlank();
}

isBlank()メソッドは、ヒープ上に新しい String を作成しないため、もう少し効率的です。 As a result, if we’re on Java 11 or above, this is the preferred approach.

5. Bean Validation

blank 文字列をチェックする別の方法は、正規表現です。 For instance, this comes in handy with Java Bean Validation:

@Pattern(regexp = "\\A(?!\\s*\\Z).+")
String someString;

The given regular expression ensures that empty or blank strings won’t validate.

6. ApacheCommonsを使用

依存関係を追加しても問題がない場合は、 Apache CommonsLangを使用できます。 これには、Java用の多数のヘルパーがあります。

Mavenを使用する場合は、commons-lang3依存関係をpomに追加する必要があります。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

特に、これによりStringUtilsが得られます。

This class comes with methods like isEmpty, isBlank, and so on:

StringUtils.isBlank(string)

この呼び出しは、独自のisBlankStringメソッドと同じように実行されます。 nullセーフであり、空白もチェックします。

7. グアバと

特定の文字列関連ユーティリティを提供するもう1つの有名なライブラリは、GoogleのGuavaです。 バージョン23.1以降、Guavaにはandroidjreの2つのフレーバーがあります。 AndroidフレーバーはAndroidとJava7を対象としていますが、JREフレーバーはJava8を対象としています。

Androidをターゲットにしていない場合は、JREフレーバーをpomに追加するだけです。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

Guavas Strings class comes with the method Strings.isNullOrEmpty:

Strings.isNullOrEmpty(string)

It checks whether a given string is null or empty, but it won’t check for whitespace-only strings.

8. 結論

文字列が空かどうかを確認する方法はいくつかあります。 多くの場合、文字列が空白であるかどうか、つまり空白文字のみで構成されているかどうかも確認する必要があります。

最も便利な方法は、StringUtils.isBlankなどのヘルパーを提供するApacheCommonsLangを使用することです。 プレーンJavaに固執したい場合は、 String#trimString#isEmptyまたはString#lengthの組み合わせを使用できます。 Bean Validationの場合、代わりに正規表現を使用できます。

Make sure to check out all these examples over on GitHub.