Java判断字符串为空的几种方式
判断字符串为空的方式
非空和非null
在了解常见的判断方法之前, 先要理解非空和非null的概念:
- 非空(non-empty)指的是对象或容器(字符串,集合,数组等)中包含了有效的元素或数据. 对于字符串来说, 非空意味着字符串至少有一个字符, 对于集合或数组来说, 非空意味着其中至少有一个元素. 例如
"hello"
是一个非空字符串,[1,2,3]
是一个非空的整数数组. - 非null(non-null)是一个更广泛的概念, 它指的是对象引用不为null. 如果一个对象引用为null, 意味着它没有指向任何有效的对象, "非null"就是指对象引用不是null, 它指向了一个有效的对象或实例.
两者的区别:
- 非空(non-empty)是针对容器中是否包含有效元素或数据的状态.
- 非null(non-null)是针对对象引用是否指向有效对象的状态.
判断方式
手动判断, 与之类似的还有org.apache.commons.lang
包中的isEmpty()
方法:
if(str.length == 0 && str == null);
isEmpty()
方法源码:
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
使用String类自带的isEmpty()
方法, 当字符串长度为0时返回ture, 否则返回false
if(str.isEmpty());
使用equals()
方法检测字符串是否与空字符串相等, 如果字符串为空串返回true, 否则返回false
if(str.equals(""));
使用trim()
方法去除字符串首尾的空白字符, 然后再检查字符串是否为空
if(str.trim().isEmpty());
使用JDK11的新方法isBlank()
, 该方法用于检测字符串是否为空或只包含空格字符, 它会将全角空格,制表符也视为空格.
isBlank()
方法简化版源码:
public final class String {
public boolean isBlank(String str) {
int strLen = str.length();
byte[] bytes = str.getBytes();
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(bytes[i])) {
return false;
}
}
return true;
}
}
isBlank()
方法的使用:
if(str != null && !str.isBlank());
使用org.apache.commons.lang
包中的StringUtils.isNotBlank()
方法, 该方法同时判断了字符串是否为空, 是否为null, 是否包含空格等情况
StringUtils.isNotBlank()
方法源码:
public static boolean isBlank(String str) {
int strLen;
if (str != null && (strLen = str.length()) != 0) {
for(int i = 0; i < strLen; ++i) {
if (!Character.isWhitespace(str.charAt(i))) {
return false;
}
}
return true;
} else {
return true;
}
}
StringUtils.isNotBlank()
方法使用:
if(StringUtils.isNotBlank(str));
注意: 以上的方法中除了org.apache.commons.lang
包中的isNotBlank()
和isEmpty()
方法, 其他方法在字符串为null时都会抛出空指针异常(NullPointerException).