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();
}
有问题可以在公众号留言。
共同学习,共同提升,原创作品,禁止转载!
相关文章 :