StringUtils.isBlank vs. Regexp

时间:2010-11-16 22:24:01

标签: java regex string apache-stringutils

所以我正在查看一些遗留代码并找到他们执行此操作的实例:

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

暂时忽略.matches(..)调用每次都创建一个新的模式和匹配器(uhg) - 但是有任何理由不将此行更改为:

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

我很确定正则表达式只是匹配,如果字符串是全部空格。 StringUtils会捕获与第一个相同的条件吗?

3 个答案:

答案 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());
}