おすすめアイテムをいくつか紹介

広告ブロックがONになっていると表示されないことがあります。



【java】StringクラスとStringUtilクラスのisEmptyメソッドの違いについて

お疲れ様です。
はるさらと申します。

今回はjavaの備忘録記事となります。

String型の文字列に対して
isEmpty()メソッドを使用し
NULLチェックを行う際に
String.isEmpty
StringUtils.isEmptyの違いで
罠に引っ掛かったことがあるので
違いについてお話ししようと思います。

NULLチェックにはどちらのisEmptyメソッド使用すべきか

結論から申し上げると
StringUtils.isEmptyメソッドを
使用してあげるべきだと思います。

理由としては
String.isEmptyメソッドでは
ブランク(空欄)の検知はできますが
NULLに使用すると
『java.lang.NullPointerException』
発生してしまうためです。

詳しくはこの後の章で記載していきます。

StringUtils.isEmptyメソッドの使用例

StringUtilsクラスの
isEmptyメソッドを使用することで
NULLの場合もチェックすることができます。

下記のソースでは
それぞれString型の変数に
・文字列
・ブランク
・NULL
を設定し、その結果をboolean型の変数に格納して
どのような値が設定されるかを確認しています。

import org.apache.commons.lang3.StringUtils;

public class StringUtilsTest {
	public static void main(String[] args) {
		
		//String型の変数に文字列を代入
		String str1 = "文字列";
		//String型の変数にブランク(空欄)を代入
		String str2 = "";
		//String型の変数にNULLを代入
		String str3 = null;
		
		boolean result1 = StringUtils.isEmpty(str1);
		boolean result2 = StringUtils.isEmpty(str2);
		System.out.println("str1:"+result1);
		System.out.println("str2:"+result2);
		
		boolean result3 = StringUtils.isEmpty(str3);
		System.out.println("str3:"+result3);
	}
}

StringUtils.isEmptyメソッドの
結果としては
・文字列→false
・ブランク→true
・NULL→true
が返却されており、

NULLの場合でも
判定してくれていることがわかります。

StringクラスのisEmtpyメソッド使用例

一方、StringクラスのisEmptyメソッドでは
str1(文字列)、str2(ブランク)は
判定できていますが

str3(NULL)については
NullPointerExceptionの例外
起きてしまいます。


public class StringTest {
	public static void main(java.lang.String[] args) {

		//String型の変数に文字列を代入
		String str1 = "文字列";
		//String型の変数にブランク(空欄)を代入
		String str2 = "";
		//String型の変数にNULLを代入
		String str3 = null;
		
		boolean result1 = str1.isEmpty();
		boolean result2 = str2.isEmpty();
		System.out.println("str1:"+result1);
		System.out.println("str2:"+result2);
		
		boolean result3 = str3.isEmpty();
		System.out.println("str3:"+result3);
	}
}

そのため、Stringクラスの
isEmptyメソッドだけでは
NULLの判定ができない
ことがわかります。

NULLチェックに使用するisEmptyメソッドのまとめ

isEmptyメソッドを使用して
NULLチェックを行いたい場合は
StringUtilsクラスを使用しましょう。

StringクラスのisEmptyメソッドでも
NullPointerExceptionが出たら
例外をキャッチするようにして
処理を進めれば出来ないもなさそうですが・・・

まどろっこしいため
あまりお勧めはできないのかなと思います。

それではまたー!!