当前位置: 首页 > news >正文

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否则返回falseLog.d("=======isEmpty", "".isEmpty().toString()) //打印结果为true// 如果判断字符不为空返回值返回true否则返回falseLog.d("=======isNotEmpty", "123".isNotEmpty().toString()) //打印结果为trueval str1: String? = null// 如果为空或者null返回true否则返回falseLog.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否则返回falseLog.d("=======isBlank", " ".isBlank().toString()) //打印结果为true// 如果判断字符不为空返回值返回true否则返回falseLog.d("=======isNotBlank", "123".isNotBlank().toString()) //打印结果为trueval str1: String? = null// 如果为空或者null返回true否则返回falseLog.d("=======isNullOrBlank", str1.isNullOrBlank().toString()) //打印结果为true

最后说下空字符与单个空格字符的区别

""这个是空字符串 一个长度为 0 的字符串
“ ”单个空格字符 这是一个只包含一个空白字符(ASCII 码为 32 的字符)的字符串,其长度为 1

相关文章:

  • 数据结构期末复习(1)数据结构和算法 线性表
  • 个人实际开发心得感悟及学习方法
  • Vue中的组件通信方式及应用场景
  • 2024年道路运输企业主要负责人证考试题库及道路运输企业主要负责人试题解析
  • 各种基础环境搭建
  • Danil Pristupov Fork(强大而易用的Git客户端) for Mac/Windows
  • Keil5,ARM编译器 软件优化注意事项
  • 如何利用firewalld抵御DDOS攻击
  • pyqt6 + pycharm 搭建+使用入门
  • 两个bash函数创建一个数据库
  • C++笔记之cout高亮输出以及纯C++实现一个彩色时钟
  • Python+Django+MySQL的学生信息管理系统【附源码,运行简单】
  • 用Redis实现全局唯一ID
  • Python 使用input函数从键盘输入数据
  • LeetCode 每日一题 Day 36 ||模拟/字典序(哈希策略)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 2017届校招提前批面试回顾
  • C++类的相互关联
  • canvas 五子棋游戏
  • ERLANG 网工修炼笔记 ---- UDP
  • go语言学习初探(一)
  • JavaScript 一些 DOM 的知识点
  • js正则,这点儿就够用了
  • Linux Process Manage
  • swift基础之_对象 实例方法 对象方法。
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue ES6 Jade Scss Webpack Gulp
  • 悄悄地说一个bug
  • 驱动程序原理
  • 如何使用 JavaScript 解析 URL
  • 实现菜单下拉伸展折叠效果demo
  • 小程序button引导用户授权
  • 容器镜像
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 昨天1024程序员节,我故意写了个死循环~
  • ​你们这样子,耽误我的工作进度怎么办?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #每日一题合集#牛客JZ23-JZ33
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二十四)Flask之flask-session组件
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (状压dp)uva 10817 Headmaster's Headache
  • ../depcomp: line 571: exec: g++: not found
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net framework4与其client profile版本的区别
  • .NET 中的轻量级线程安全
  • .NET处理HTTP请求
  • @Autowired多个相同类型bean装配问题