現場で覚えたJava文法知識【備忘録】③

## 今回の備忘録
「org.apache.commons.lang3」の「StringUtils」についてです。
<https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html>

## 空文字チェックをする場合
### 「StringUtils.isEmpty」
→空文字の場合、true
→空文字でない場合、false

```java:InputPractice3.java
    import org.apache.commons.lang3.StringUtils; // 参照

    @SpringBootApplication
    public class InputPractice3 {

    public static void main(String[] args) {

        String testA = "　";     // スペース
        String testB = "あいう";  // 設定文字
        String testC = "";       // 空文字
        String testD = null;     // NULL

        // testAで判定
        if (StringUtils.isEmpty(testA)) {
            System.out.println("testA:(1)空文字です");
        }
        // testBで判定
        if (StringUtils.isEmpty(testB)) {
            System.out.println("testB:(1)空文字です");
        }
        // testCで判定
        if (StringUtils.isEmpty(testC)) {
            System.out.println("testC︎:(1)空文字です"); // 通る
        }
        // testDで判定
        if (StringUtils.isEmpty(testD)) {
            System.out.println("testD:(1)空文字です"); // 通る
        }
    }
}

    // 結果
    // testC︎:(1)空文字です
    // testD:(1)空文字です
```

結論：
　スペースは「空文字」とは認定されない。
　空文字とNULLは「空文字」と認定される。


## 空文字でないことをチェックをする場合
### 「StringUtils.isNotEmpty」
→空文字でないの場合、true
→空文字の場合、false

```java:InputPractice3.java
    import org.apache.commons.lang3.StringUtils; // 参照

    @SpringBootApplication
    public class InputPractice3 {

    public static void main(String[] args) {

        String testA = "　";     // スペース
        String testB = "あいう";  // 設定文字
        String testC = "";       // 空文字
        String testD = null;     // NULL

        // testAで判定
        if (StringUtils.isNotEmpty(testA)) {
            System.out.println("testA:(2)空文字ではありません"); // 通る
        }
        // testBで判定
        if (StringUtils.isNotEmpty(testB)) {
            System.out.println("testB:(2)空文字ではありません"); // 通る
        }
        // testCで判定
        if (StringUtils.isNotEmpty(testC)) {
            System.out.println("testC:(2)空文字ではありません");
        }
        // testDで判定
        if (StringUtils.isNotEmpty(testD)) {
            System.out.println("testD:(2)空文字ではありません");
        }
    }
}

// 結果
// testA:(2)空文字ではありません
// testB:(2)空文字ではありません
```

結論：
　isNotEmptyというだけあって、isEmptyと全く逆の結果になる。

## スペースをチェックをする場合
### 「StringUtils.isBlank」
→スペース（ブランク）の場合、true
→スペース（ブランク）でない場合、false

```java:InputPractice3.java
    import org.apache.commons.lang3.StringUtils; // 参照

    @SpringBootApplication
    public class InputPractice3 {

    public static void main(String[] args) {

        String testA = "　";     // スペース
        String testB = "あいう";  // 設定文字
        String testC = "";       // 空文字
        String testD = null;     // NULL

        // testAで判定
        if (StringUtils.isBlank(testA)) {
            System.out.println("testA:(3)空白文字です"); // 通る
        }
        // testBで判定
        if (StringUtils.isBlank(testB)) {
            System.out.println("testB:(3)空白文字です");
        }
        // testCで判定
        if (StringUtils.isBlank(testC)) {
            System.out.println("testC:(3)空白文字です"); // 通る
        }
        // testDで判定
        if (StringUtils.isBlank(testD)) {
            System.out.println("testD:(3)空白文字です"); // 通る
        }
    }
}

// 結果
// testA:(3)空白文字です
// testC:(3)空白文字です
// testD:(3)空白文字です
```

結論：
　isEmptyの結果+αで、スペースも検知される。
（空文字とブランクを共に見たい場合におすすめ）

## スペース文字でないことをチェックをする場合
### 「StringUtils.isNotBlank」
→スペース（ブランク）でない場合、true
→スペース（ブランク）の場合、false

```java:InputPractice3.java
    import org.apache.commons.lang3.StringUtils; // 参照

    @SpringBootApplication
    public class InputPractice3 {

    public static void main(String[] args) {

        String testA = "　";     // スペース
        String testB = "あいう";  // 設定文字
        String testC = "";       // 空文字
        String testD = null;     // NULL

        // testAで判定
        if (StringUtils.isNotBlank(testA)) {
            System.out.println("testA:(4)空白文字ではありません");
        }
        // testBで判定
        if (StringUtils.isNotBlank(testB)) {
            System.out.println("testB:(4)空白文字ではありません"); // 通る
        }
        // testCで判定
        if (StringUtils.isNotBlank(testC)) {
            System.out.println("testC:(4)空白文字ではありません");
        }
        // testDで判定
        if (StringUtils.isNotBlank(testD)) {
            System.out.println("testD:(4)空白文字ではありません");
        }
    }
}

// 結果
// testB:(4)空白文字ではありません
```

結論：
　こちらもisNotBlankというだけあって、isBlankと全く逆の結果になる。

## 終わりに
これまではisEmptyを使うことしかほとんどなかったのですが、isBlankを積極的に使っていこうと思いました。isEmptyに指定する際に、isEmpty(文字列.trim())を使用でも、isBlankとの併用と同じ結果になるので、そちらでも良いかもです。
StringUtilsはよく使うチェックに使えるものが多いので、しばらくいろいろ試していこうと思っています。