StringUtils の概要

StringUtils は、最もよく使用される Apache Commons クラスです。これには、開発者が基本的な操作のための定型コードや単純に扱いにくいコードを作成することを避けるのに役立つさまざまなユーティリティとメソッドが含まれています。

StringUtilsクラスのメソッドの多くにはjava.lang.Stringと同等のメソッドがありますが、java.lang.Stringメソッドとは異なり、null セーフです。これは、予期しない瞬間にNullPointerException がスローされないことを意味します

Apache Commons には多数のメソッドが含まれており、最も一般的に使用されるメソッドのいくつかを見ていきます。

StringUtils メソッドのリスト:

isEmpty() 文字列が空かどうかを確認します
等しい() 文字列を比較します
比較() 文字列を比較します
の指標() 文字列内の部分文字列を検索する
lastIndexOf() 文字列内の部分文字列を検索する
を含む() 文字列内に部分文字列が含まれているかどうかを確認します
containsIgnoreCase() 大文字と小文字を区別せずに、文字列内の部分文字列の出現をチェックします。
containsAny() 部分文字列が文字列内のどこかに出現するかどうかを確認します
containsNone() 部分文字列が文字列内のどこかに出現するかどうかを確認します
containsOnly() 文字列内に部分文字列が含まれているかどうかを確認します
部分文字列() 部分文字列の取得
スプリット() 文字列を部分文字列に分割する
加入() 部分文字列を連結する
削除() 部分文字列の削除
交換() 部分文字列を置換する
countMatches() 一致数を数える

StringUtils.isEmpty() および StringUtils.isBlank()

どちらのメソッドも、文字列にテキストが含まれているかどうかを確認するために使用されます。文字列が実際に空の場合、true を返します。さらに、文字列にスペースのみが含まれている場合も、isBlank()はtrueを返します。

また、独自の逆メソッドisNotEmpty()およびisNotBlank()もあります。

isEmpty() を、対応するjava.lang.String.isEmpty()およびisBlank()とともに使用する方法を見てみましょう。

String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(!nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

ここにはString型の変数が 3 つあります。1 つはnullを指し、2 つ目はnullではありませんが内容がありません (空の文字列)、3 つ目は空ではありませんが、空の結果を出力します。

このコードを実行すると、次の結果が得られます。

emptyValue is emptyValue
blankValue is blankValue
Exception in thread "main" java.lang.NullPointerException

java.lang.Stringに組み込まれているisEmpty()メソッドはnullセーフではありません。null参照でメソッドを呼び出すため、空かどうかを確認しようとすると、簡単にNullPointerExceptionが発生します。参照が null かどうかを事前に確認する必要があります。

String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(nullValue != null && !nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

これにより、次の結果が得られます。

emptyValue is emptyValue
blankValue is blankValue

そして、これらのメソッドをテストすると、null文字列:

String nullValue = null;

if(StringUtils.isEmpty(nullValue)) {
   System.out.println("nullValue is emptyValue");
}

if(StringUtils.isBlank(nullValue)) {
   System.out.println("nullValue is blankValue");
}

すると、次のようになります。

nullValue is emptyValue
nullValue is blankValue

StringUtilsメソッドはnullセーフであり、 nullが渡された場合でも期待どおりの結果を生成します。

StringUtils.equals()

このメソッドは 2 つの文字列を比較し、それらが同一である場合、または両方の参照がnullを指している場合にtrueを返しますが、このメソッドでは大文字と小文字が区別されることに注意してください。

それがどのように機能するかを見てみましょう:

System.out.println(StringUtils.equals(null, null));
System.out.println(StringUtils.equals(null, "some information"));
System.out.println(StringUtils.equals("some information", null));
System.out.println(StringUtils.equals("some information",  "some information"));
System.out.println(StringUtils.equals("some additional information", "some information"));

結果:

true
false
false
true
false

StringUtilsquals()メソッドとjava.lang.String.equals()を比較するには、次のようにします。

String nullValue = null;

System.out.println(StringUtils.equals(nullValue, null));
System.out.println(StringUtils.equals(nullValue, "some information"));

System.out.println(nullValue.equals(null));
System.out.println(nullValue.equals("some information"));

これにより、次の画面に戻ります。

true
false
Exception in thread "main" java.lang.NullPointerException

繰り返しますが、 null参照でメソッドを呼び出すとNullPointerExceptionが発生するため、参照変数を使用する前に参照変数がnullかどうかを確認する必要があります。

StringUtils.compare()

このメソッドの宣言は次のようになります。

public static int compare(final String str1, final String str2)

このメソッドは、 java.lang.String.compareTo()メソッドと同様に、2 つの文字列を辞書順に比較し、次の値を返します。

  • str1 が str2 と等しい場合 (または両方が null の場合) 0
  • str1 が str2 より小さい場合、値は 0 より小さくなります。
  • str1 が str2 より大きい場合は 0 より大きい値

辞書編集順は辞書の順序です。これをプログラムでどのように使用できるかを見てみましょう。

System.out.println(StringUtils.compare(null, null));
System.out.println(StringUtils.compare(null , "codeGym"));
System.out.println(StringUtils.compare("codeGym", null));
System.out.println(StringUtils.compare("codeGym", "CODEGYM"));
System.out.println(StringUtils.compare("codeGym", "codeGym"));

我々が得る:

0
-1
1
32
0

注: null値は、 null以外の値より小さいとみなされます。2 つのnull値は等しいとみなされます。

文字列に別の部分文字列が含まれているかどうかを確認する

これを行うために、StringUtils には 5 つのメソッドがあります。

  • を含む()
  • containsIgnoreCase()
  • containsAny()
  • containsNone()
  • containsOnly()

contains()メソッドは、検索シーケンスが別のシーケンスに含まれるかどうかに応じてtrueまたはfalseを返します。

このようなメソッドにnullが渡されると、 falseが返されます。null以外の値が渡された場合、メソッドは渡されたオブジェクトに対してjava.lang.String.indexOf(String str)を呼び出すだけです。

例:

String value = "CodeGym is cool";

System.out.println(StringUtils.contains(null, "a"));
System.out.println(StringUtils.contains(value, "CodeGym"));
System.out.println(StringUtils.contains(value, "C++"));
System.out.println(StringUtils.contains(value, "codegym"));

このメソッドでは大文字と小文字が区別されるため、最後の呼び出しでもfalseが返されます。

false
true
false
false

containsAny()メソッドは、最初の引数として渡された文字列に 2-N 引数で渡された部分文字列の少なくとも 1 つが含まれている場合にtrueを返します。

例:

String value = "CodeGym is cool";
System.out.println(StringUtils.containsAny(value, "cool", "c00l", "bro", "hello"));

表示されます:

true

このメソッドでは大文字と小文字も区別されます。

containsNone() メソッド

特定の文字列にリストのものが含まれていないことを確認する必要がある場合は、containsNone()メソッドを使用できます。最初のパラメータは文字列で、次のパラメータはターゲット シンクにあるべきではない文字列です。

例:

String s = "CodeGym is cool";
System.out.println(StringUtils.containsNone(s, 'g', 'a'));

コンソール出力:

false

部分文字列の操作

部分文字列の操作は、 Stringクラスのメソッドの操作と似ています。

substring(String str, int start)
substring (String str, int start, int end)

これらのメソッドは、文字列strから部分文字列を返します。文字列は、startendの 2 つのインデックスによって指定されます。Java では通常どおり、範囲の最後の文字はend-1です。これらの方法の利点は何ですか?

このようなメソッドにnullを渡すと、例外はスローされずに単にnullが返されます。これらのメソッドは負のインデックス値をサポートします。この場合、文字列は閉ループとみなされます。最後の文字の後に最初の文字が続きます。

どのように使用できるかを見てみましょう:

System.out.println(StringUtils.substring("lets java", 2, 6));
System.out.println(StringUtils.substring("lets java", -8));
System.out.println(StringUtils.substring(null, 3));

上記のコードを実行すると、次の結果が得られます。

ts j
ets java
null

StringUtils.split()

特殊な区切り文字を使用して文字列を部分文字列に分割できるメソッド。ターゲット文字列にそれが存在する場合、メソッドは部分文字列の配列を返します。文字がない場合は空の配列が返されます。nullがメソッドに渡されると、 nullが返されます。このコードとメソッドがどのように機能するかを見てみましょう。

String myData = "Address, City, State, Zip, Phone, Email, Password";

System.out.println(Arrays.toString(StringUtils.split(myData, ',')));
System.out.println(Arrays.toString(StringUtils.split(null, '.')));
System.out.println(Arrays.toString(StringUtils.split("", '.')));

結果:

[Address,  City,  State,  Zip,  Phone,  Email,  Password]
null
[]

StringUtils.join()

join()メソッドを使用すると、文字列の配列を 1 つの文字列に連結できます。同時に、特別な区切り文字を渡すことができ、結果の文字列の部分文字列の間に追加されます。nullがメソッドに渡されると、 nullが返されます。

このメソッドは、 split()メソッドの正反対です。この簡単な例を見てみましょう。

String myData = "Address, City, State, Zip, Phone, Email, Password";

String[] myString =  StringUtils.split(myData, ',');
System.out.println(StringUtils.join(myString, '-'));

上記のコードを実行すると、次の結果が得られます。

Address- City- State- Zip- Phone- Email- Password

StringUtils.replace()

文字列内で文字列を検索し、存在する場合はそれを見つけて、出現するすべての文字列を新しい文字列に置き換えます。

このメソッドの宣言は次のようになります。

public static String replace(final String text, final String searchString, final String replacement)

検索文字列がテキスト内に見つからない場合は、何も起こらず、テキストは同じままになります。同じロジックに従って、テキストがnullの場合、このメソッドはnullを返します。null文字列を探している場合、または部分文字列をnullに置き換えている場合、メソッドは元の文字列を返します。

この方法を試してみましょう:

String value = "CodeGym is the best";
System.out.println(StringUtils.replace(value, "best", "cool"));

結果:

CodeGym is the cool