kotlin isEmpty/isNotEmpty/isNullOrEmpty和isBlank/isNotBlank/isNullOrBlank

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

相关推荐
_WndProc10 分钟前
【Python】Flask网页
开发语言·python·flask
Try02123 分钟前
Kotlin中Lambda表达式妙用:超越基础语法的力量
kotlin
liujing1023292926 分钟前
Day04_刷题niuke20250703
java·开发语言·算法
whysqwhw27 分钟前
OkHttp深度架构缺陷分析与演进规划
android
用户70937225385129 分钟前
Android14 SystemUI NotificationShadeWindowView 加载显示过程
android
能工智人小辰43 分钟前
二刷 苍穹外卖day10(含bug修改)
java·开发语言
DKPT44 分钟前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
木叶丸1 小时前
跨平台方案该如何选择?
android·前端·ios
LL.。1 小时前
同步回调和异步回调
开发语言·前端·javascript
0wioiw01 小时前
Python基础(吃洋葱小游戏)
开发语言·python·pygame