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

相关推荐
微学AI27 分钟前
内网穿透的应用-把飞牛NAS变成家庭录像中心:EasyNVR部署与远程回放实战
开发语言·php
峥嵘life33 分钟前
Android WiFi连接过程 wpa_supplicant 日志分析
android·开发语言·php
BerryS3N38 分钟前
深度解析:从零构建生产级大模型 RAG(检索增强生成)系统全栈指南
开发语言·python·ai
今儿敲了吗1 小时前
Python——函数基础
开发语言·笔记·python
CHANG_THE_WORLD1 小时前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
kels88991 小时前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
Android小码家2 小时前
OWASP 移动应用安全之授权(MASTG-DEMO-0090)
android·安全·frida
a4493153622 小时前
MacBook USB-C不充电故障诊断:从PD握手到主板供电链路
c语言·开发语言·macos·电脑
德福危险2 小时前
从目录枚举到bash破壳漏洞、从流量抓包到组权限提权:靶机练习之symfonos3
开发语言·bash
Summer-Bright2 小时前
消费者 AI 变现竞争:从“一家独大“到“iOS vs Android“,谁在为 AI 买单?
android·人工智能·ios·ai·自然语言处理·agi