stringutils.isblank vs. regexp
-
11-10-2019 - |
質問
だから私はいくつかのレガシーコードを調べて、彼らがこれを行う場所を見つけています:
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());
}
所属していません StackOverflow