代码之家  ›  专栏  ›  技术社区  ›  Gandalf

StringUtils.isBlank与Regexp

  •  0
  • Gandalf  · 技术社区  · 14 年前

    因此,我正在查找一些遗留代码,并在其中查找执行此操作的实例:

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

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

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

    如果字符串都是空白的话,我敢肯定regex就是匹配的。StringUtils会捕获与第一个相同的条件吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Bozho    14 年前

    对, 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;
    }
    
        2
  •  1
  •   hhafez    14 年前

    如果字符串中有更多的零个或多个空格字符,则正则表达式测试是正确的。

    不使用正则表达式的优点

    • 正则表达式对许多人来说是神秘的,这使得它的可读性降低
    • 正如你正确指出的 .matches() 有不小的开销
        3
  •  0
  •   ldsant    11 年前
     /**
     * 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());
    }