所以我正在查看一些遗留代码并找到他们执行此操作的实例:
if ((name == null) || (name.matches("\\s*")))
.. do something
暂时忽略.matches(..)
调用每次都创建一个新的模式和匹配器(uhg) - 但是有任何理由不将此行更改为:
if (StringUtils.isBlank(name))
..do something
我很确定正则表达式只是匹配,如果字符串是全部空格。 StringUtils会捕获与第一个相同的条件吗?
答案 0 :(得分:4)
是的,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;
}
答案 1 :(得分:1)
如果字符串更多为零或更多空白字符,那么正确表达式测试是正确的。
不使用正则表达式的优点
.matches()
有一个非常重要的开销答案 2 :(得分:0)
/**
* 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());
}