質問

だから私はいくつかのレガシーコードを調べて、彼らがこれを行う場所を見つけています:

if ((name == null) || (name.matches("\\s*")))
   .. do something

その瞬間は無視します .matches(..) CALLは、毎回新しいパターンとマッチャー(UHG)を作成しますが、この行を変更しない理由は次のとおりです。

if (StringUtils.isBlank(name))
   ..do something

文字列がすべて白色である場合、正規表現が単に一致すると確信しています。 Stringutilsは最初の条件と同じ条件をすべてキャッチしますか?

役に立ちましたか?

解決

はい、 StringUtils.isBlank(..) 同じことをし、より良い方法です。コードを見てください:

public static boolean isBlank(String str) {
     int strLen;
     if ((str == null) || ((strLen = str.length()) == 0))
         return true;
     int strLen;
     for (int i = 0; i < strLen; ++i) {
        if (!(Character.isWhitespace(str.charAt(i)))) {
           return false;
        }
     }
   return true;
}

他のヒント

文字列がよりゼロ以上のホワイトスペース文字の場合、正規表現テストの場合は正しいです。

正規表現を使用しないことの利点

  • 正規表現は多くの人にとって不可解であるため、読みやすくなります
  • そして、あなたが正しく指摘したように .matches() 些細なオーバーヘッドがありません
 /**
 * Returns if the specified string is <code>null</code> or the empty string.
 * @param string the string
 * @return <code>true</code> if the specified string is <code>null</code> or the empty string, <code>false</code> otherwise
 */
public static boolean isEmptyOrNull(String string)
{
    return (null == string) || (0 >= string.length());
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top