Java中的字符串类型即String,有两个很常见的值 null和""。我们这里的判断为空就是判断是否这两个中的值。
首先你要正确理解它的含义,

String str = null;

指的是str没有地址,就是说它的引用为空,没有实例化。

String str = "";

指的是str已经实例化了,但是它的值是""。

明白上面两点后你可能就会写了,常见的写法是:

boolean isEmptyString(String str) {
    if (str!= null || str!=""){
        return true;
    }
}

这没有错,它可以正常工作,但是我想说的是它不是最优的写法,因为每次比较都行初始一个新的""。这个可不是好的事情。那我们应该怎么改进呢?有以下三种方法可用:

(1)针对Java 6或者更高的版本

boolean isEmptyString(String str) {
    return str == null || str.isEmpty();
}

看到没有,我建议你使用isEmpty方法,它是怎么达到最优呢?看一下源码或者你就明白了。

(2)针对Java 5或者更低版本

boolean isEmptyString(String str) {
    return str == null || str.length() == 0;
}

这个是直接使用了length,也直接避免了上面我们最开始提出的问题。

(3)使用正则支持所有版本

boolean isEmptyString(String str) {
    Pattern pattern = Pattern.compile("\\A(?!\\s*\\Z).+");
    Matcher matcher = pattern.matcher(str);
    return matcher.matches();
}

这个同样规避了最开始提出的问题。你Get到了吗?随然是很小的一个功能,相信还是有很多人要入坑,不管你是新人还是老码农。

写在最后,有时候我会把空格也当成空,那么只需要添加trim函数就可以了如下:

boolean isEmptyString(String str) {
    return str == null || str.trim().isEmpty();
}

boolean isEmptyString(String str) {
    return str == null || str.trim().length() == 0;
}
boolean isEmptyString(String str) {
    Pattern nonepattern = Pattern.compile("\\A(?!\\s*\\Z).+");
    Matcher matcher1 = nonepattern.matcher(str);
    Pattern blankpattern = Pattern.compile("^\S*$");
    Matcher matcher2 = blankpattern.matcher(str);
    return matcher1.matches()|| !matcher2.matches();
}

有问题可以在公众号留言。

共同学习,共同提升,原创作品,禁止转载!

本文链接

相关文章 :

Java 解析xml “尾随节中不允许有内容”