あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、SEとしての経験から取り上げたり解説したりしています。

Apache Commons LangのStringUtilsはとても便利

はじめに

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 は便利に使用することができます。

オープンソースがダメなプロジェクトだと厳しいですが、使えるようでしたら活用したいですね。