kotlin 中
isEmpty :如果判断的字符为空返回值返回true否则返回false
它的源码
@kotlin.internal.InlineOnly
public inline fun CharSequence.isEmpty(): Boolean = length == 0
length == 0
: 首先检查字符序列的长度是否为 0。如果长度为 0,则表明这个字符序列不包含任何字符,因此被认为是空白的,直接返回 true
,(符合java中空字符串的定义,一个长度为0的字符串)
isNotEmpty :如果判断的字符不为空返回值返回true否则返回false
它的源码
@kotlin.internal.InlineOnly
public inline fun CharSequence.isNotEmpty(): Boolean = length > 0
isNullOrEmpty : 如果判断的字符为空或者null返回true否则返回false
它的源码
@kotlin.internal.InlineOnly
public inline fun CharSequence?.isNullOrEmpty(): Boolean {
contract {
returns(false) implies (this@isNullOrEmpty != null)
}
return this == null || this.length == 0
}
看下这个的打印值
val str1: String? = null
Log.d("=======isEmpty", str1?.isEmpty().toString())
写完之后编译器一直提示str1?.isEmpty() is always null ,运行的打印结尾也是null
原因是安全调用操作符 ?.
允许我们在链式调用中安全地访问可空对象的方法或属性,如果对象为 null,则整个表达式的结果也为 null。当 str1
为 null 时,str1?.isEmpty()
不会执行 .isEmpty()
方法,因为 str1 已经是 null,不需要进一步检查其是否为空字符串。
所以有时候根据条件不同选择isNullOrEmpty
列举几个打印为true的
// 如果判断字符为空返回值返回true否则返回false
Log.d("=======isEmpty", "".isEmpty().toString()) //打印结果为true
// 如果判断字符不为空返回值返回true否则返回false
Log.d("=======isNotEmpty", "123".isNotEmpty().toString()) //打印结果为true
val str1: String? = null
// 如果为空或者null返回true否则返回false
Log.d("=======isNullOrEmpty", str1.isNullOrEmpty().toString()) //打印结果为true
在说下面的之前看下这个
Log.d("=======isEmpty", " ".isEmpty().toString()) //打印结果为false
isEmpty只关心字符串是否有字符,像这种空白字符,是有长度的所以无法使用isEmpty
isBlank 如果判断的字符为空或者是一个空字符返回true负责返回false
isNotBlank 如果判断的字符不为空或者不是一个空字符返回true负责返回false
isNullOrBlank 如果判断的字符为nul,空或者是一个空字符返回true负责返回false
理解几个打印为true的例子
// 如果判断的字符为空返回值返回true否则返回false
Log.d("=======isBlank", " ".isBlank().toString()) //打印结果为true
// 如果判断字符不为空返回值返回true否则返回false
Log.d("=======isNotBlank", "123".isNotBlank().toString()) //打印结果为true
val str1: String? = null
// 如果为空或者null返回true否则返回false
Log.d("=======isNullOrBlank", str1.isNullOrBlank().toString()) //打印结果为true
最后说下空字符与单个空格字符的区别
""这个是空字符串 一个长度为 0 的字符串
" "单个空格字符 这是一个只包含一个空白字符(ASCII 码为 32 的字符)的字符串,其长度为 1