String の null チェック、空チェック

Java11 を使うようになっても、
 org.apache.commons.lang.StringUtils.isEmpty(String)
や、
 org.springframework.util.StringUtils.isEmpty(String)
を外部JARを使って、nullチェックの代わりと "" でないことをチェックする
コードをよく見かけるという哀れな状況がある。
しかも、org.springframework.util.StringUtils.isEmpty の方は、
@Deprecated なはずだ、それでも springframework StringUtils を使うなら、
むしろ hasText(CharSequence) の方を使って null なら false であることを
チェックすべきだ。

String が空であるかのチェック、"" だけでなく、" " や、全角空白文字のみであるか、
改行文字、"\n", "\r\n" だけであるか、同時に、isEmpty() の代わりに null チェックも
する場合、、

Java11 なら、String の isBlank() を使うのが最も良い。

同等の機能を、Java8 でも処理したければ、
 commons.lang なら、String の StringUtils.isBlank(CharSequence)
 springframework なら、StringUtils.hasText(CharSequence)

が妥当であろう。

String をチェックして、null あるいは、空文列、半角空白、全角空白、改行文字、タブ文字
だけで構成する文字列であるかどうかチェックして
if~else 文を書く場合、もちろん if 文 で、str==null || と続けて if 文の式を書いても
良いのだろうが、

Java11 なら、

// String str を判定

Optional.ofNullable(str).map(String::strip)
.filter(Predicate.not(String::isBlank)).ifPresentOrElse(e->{
   // TODO ブランク、空、でない文字列の処理

}, ()->{
   // TODO null または、空の場合の処理

});

Java11 では、trim は、全角空白を削除してくれないが、
strip / stripLeading / stripTrailing は、全角空白を削除してくれる。
から上の方法が成立する。

同じことを Java8 で

Optional.ofNullable(str)
.map(e->e.replaceFirst("^[\\h\\H]+", "").replaceFirst("[\\h\\H]+$", ""))
.<Runnable>map(e->()->{
   // TODO ブランク、空、でない文字列の処理

).orElse(()->{
   // TODO null または、空の場合の処理

}).run();

正規表現
\h : 水平方向の空白文字 [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\H : 水平方向以外の空白文字: [^\h]
を利用する。