はじめに
Java で文字列を扱う時に、null や空白文字("")がある関係で、ちょっと条件判定が面倒なことがあります。
こんな感じですね。
if (value == null || value.isEmpty()) { // 値がない場合の処理 }
そんな時に、Apache Commons Lang の StringUtils を使用すると、とても簡単に判定することができます。
こんな感じですね。
if (StringUtils.isEmpty(value)) { // 値がない場合の処理 }
Spring にも StringUtils という同じ名前のクラスがあるのですが、 isEmpty
が非推奨だったりして微妙に使いにくかったり、機能が少なかったりするので、Apache Comonns Lang に統一するとよいかと思っています。
Apache Commons Lang と Spring の StringUtils が共存すると混乱するので、開発プロジェクトではどちらか一方に寄せる必要があります。
StringUtils の設定
StringUtils は、以下の Maven Repository の最新のバージョンを使用します。2022/07/10時点では、 3.12.0
になります。
Gradle では以下のように指定します。
dependencies { // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 implementation 'org.apache.commons:commons-lang3:3.12.0' }
StringUtils を使ってみる
StringUtils のすべての機能は下記ドキュメントに掲載されていますが、便利なものをピックアップしてみます。
isEmpty
StringUtils.isEmpty(文字列) という形で、文字列が null か空文字("")の場合に true が返ってきます。
以下のように使用します。
public void isEmpty() { final String nullString = null; System.out.println("string is null: " + StringUtils.isEmpty(nullString)); final String emptyString = ""; System.out.println("string is empty: " + StringUtils.isEmpty(emptyString)); final String haveValue = "value"; System.out.println("string is null or empty: " + StringUtils.isEmpty(haveValue)); }
実行結果は以下になります。
string is null: true string is empty: true string is null or empty: false
isNotEmpty
StringUtils.isNotEmpty(文字列) という形で、文字列が null か空文字("")でない場合に true が返ってきます。
以下のように使用します。
public void isNotEmpty() { final String nullString = null; System.out.println("string is not null: " + StringUtils.isNotEmpty(nullString)); final String emptyString = ""; System.out.println("string is not empty: " + StringUtils.isNotEmpty(emptyString)); final String haveValue = "value"; System.out.println("string is not null nor empty: " + StringUtils.isNotEmpty(haveValue)); }
実行結果は以下になります。
string is not null: false string is not empty: false string is not null nor empty: true
equals
StringUtils.equals(文字列1, 文字列2) という形で使用します。
String クラスで、文字列1.equals(文字列2) のように使用すると、文字列1 が null の際に、NullPointerException が発生してしまいますが、StringUtils.equals を使用することでこの問題を回避できます。
等しい場合
public void equals() { final String value1 = new String("value"); final String value2 = new String("value"); System.out.println("String is equal to: " + StringUtils.equals(value1, value2)); }
実行結果は以下になります。
String is equal to: true
等しくない場合
public void notEquals() { final String value1 = null; final String value2 = new String("value"); System.out.println("String is equal to: " + StringUtils.equals(value1, value2)); }
実行結果は以下になります。
String is equal to: false
isNumeric
StringUtils.isNumeric(文字列) という形で、文字列が数値形式の場合に true になります。Integer.valueOf(文字列) などの変換前に確認しておくと、例外が発生しなくなります。
数値形式の場合
public void isNumeric() { final String number = "1"; System.out.println("number format is: " + StringUtils.isNumeric(number)); }
実行結果は以下になります。
number format is: true
数値形式ではない場合
public void isNotNumeric() { final String number = "number"; System.out.println("number format is: " + StringUtils.isNumeric(number)); }
実行結果は以下になります。
number format is: false
isAllEmpty
StringUtils.isAllEmpty(文字列1, 文字列2, 文字列3) という形で、複数の文字列がすべて null または空文字("") の場合に true が返ってきます。
すべて null か空文字の場合
public void isAllEmpty() { final String value1 = null; final String value2 = ""; final String value3 = null; System.out.println("all string is empty: " + StringUtils.isAllEmpty(value1, value2, value3)); }
実行結果は以下になります。
all string is empty: true
null か空文字でない文字列が含まれる場合
public void isAllEmptyFalse() { final String value1 = null; final String value2 = ""; final String value3 = "value"; System.out.println("all string is empty: " + StringUtils.isAllEmpty(value1, value2, value3)); }
実行結果は以下になります。
all string is empty: false
おわりに
こんな感じで、Apache Commons Lang の StringUtils は便利に使用することができます。
オープンソースがダメなプロジェクトだと厳しいですが、使えるようでしたら活用したいですね。