Java StringUtils.isBlank与Regexp

Java StringUtils.isBlank与Regexp,java,regex,string,apache-stringutils,Java,Regex,String,Apache Stringutils,因此,我正在查看一些遗留代码,并找到它们执行此操作的实例: if ((name == null) || (name.matches("\\s*"))) .. do something 暂时忽略.matches(..)调用每次都会创建一个新的模式和匹配器(uhg)-但是有没有理由不将此行更改为: if (StringUtils.isBlank(name)) ..do something 我很确定,如果字符串都是空白,正则表达式就会匹配。StringUtils会捕获与第一个相同的所有

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

if ((name == null) || (name.matches("\\s*")))
   .. do something
暂时忽略
.matches(..)
调用每次都会创建一个新的模式和匹配器(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;
}
public静态布尔值为空(String str){
国际斯特伦;
如果((str==null)| |((strLen=str.length())==0))
返回true;
国际斯特伦;
对于(int i=0;i
是的,
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;
}
public静态布尔值为空(String str){
国际斯特伦;
如果((str==null)| |((strLen=str.length())==0))
返回true;
国际斯特伦;
对于(int i=0;i
如果字符串包含零个或多个空格字符,则正则表达式测试是正确的

不使用正则表达式的优点

  • 正则表达式对许多人来说都很神秘,这使得它的可读性较差
  • 正如您正确指出的那样,
    .matches()
    的开销非常大

如果字符串包含零个或多个空格字符,则正则表达式测试是正确的

不使用正则表达式的优点

  • 正则表达式对许多人来说都很神秘,这使得它的可读性较差
  • 正如您正确指出的那样,
    .matches()
    的开销非常大

这是不正确的。OP想知道字符串是否有空格或为空<如果字符串为“”,则code>string.length()=<0将返回false。虽然这是一个空字符串,在方法中应返回true,但它将返回false,因为它既不是null,也不是长度=<0。如果您确实不想使用
StringUtils.isBlank()
(您应该这样做),那么返回语句应该是
return(null==string)| |(0>=string.trim().length())
The
.trim()
会切断方法外部的所有空白。i、 e.:
“你好”。trim()
将等同于“你好”,这是不正确的。OP想知道字符串是否有空格或为空<如果字符串为“”,则code>string.length()=<0将返回false。虽然这是一个空字符串,在方法中应返回true,但它将返回false,因为它既不是null,也不是长度=<0。如果您确实不想使用
StringUtils.isBlank()
(您应该这样做),那么返回语句应该是
return(null==string)| |(0>=string.trim().length())
The
.trim()
会切断方法外部的所有空白。i、 e.:
“你好”。trim()
等同于“你好”