当前位置: 首页 > 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

相关文章:

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,则表明这个字…...

Qt/QML编程学习之心得:Linux下USB接口使用(25)

很多linux嵌入式系统都有USB接口,那么如何使用USB接口呢? 首先,linux的底层驱动要支持,在linux kernal目录下可以找到对应的dts文件,(device tree) usb0: usb@ee520000{compatible = "myusb,musb";status = "disabled";reg = <0xEE520000 0x100…...

概率论与数理统计 知识点+课后习题

文章目录 &#x1f496; [学习资源整合](https://www.cnblogs.com/duisheng/p/17872980.html)&#x1f4da; 总复习&#x1f4d9; 选择题&#x1f4d9; 填空题&#x1f4d9; 大题1. 概率2. 概率3. 概率4. P5. 概率6. 概率密度函数 F ( X ) F(X) F(X)7. 分布列求方差 V ( X ) …...

Spring Boot实战:深入理解@Service与@Mapper注解

1. Service 注解 Service 是Spring框架提供的一个注解&#xff0c;用于标记类为业务逻辑层的组件。当类上标注了Service注解后&#xff0c;Spring容器会自动扫描并创建该类的一个实例&#xff08;即Bean&#xff09;&#xff0c;这样我们就可以在其他地方通过自动装配&#xf…...

【DevOps-06】Jenkins实现CI/CD操作

一、简要说明 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 二、准备Springboot工程 1、IDEA新建工程 2、填写项目工程信息 3、选择Springboot版本…...

华为面经总结

为了帮助大家更好的应对面试&#xff0c;我整理了往年华为校招面试的题目&#xff0c;供大家参考~ 面经1 技术一面 自我介绍说下项目中的难点volatile和synchronized的区别&#xff0c; 问的比较细大顶堆小顶堆怎么删除根节点CSRF攻击是什么&#xff0c;怎么预防线程通信方式…...

大模型实战营Day1 书生·浦语大模型全链路开源体系

1.大模型为发展通用人工智能的重要途经 专用模型&#xff1a;针对特定任务解决特定问题 通用大模型&#xff1a;一个模型对应多模态多任务 2.InternLM大模型开源历程 3.InternLM-20B大模型性能 4.从模型到应用&#xff1a;智能客服、个人助手、行业应用 5.书生浦语全链条开源…...

Java 集合面试题真实场景还原

Java 集合面试题真实场景还原 文章目录 Java 集合面试题真实场景还原Java常见的集合类ListHashMap Java常见的集合类 面试官&#xff1a;说一说Java提供的常见集合&#xff1f;&#xff08;画一下集合结构图&#xff09; 候选人&#xff1a; 嗯~~&#xff0c;好的。 在java中提…...

AutoSAR(基础入门篇)4.9-Autoar_BSW小结

Autoar_BSW小结 Autoar_BSW小结 一、Autoar_BSW小结 1、BSW组件图 2、BSW的功能概述 3、BSW在工程里的应用实际工程...

Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中

场景 SpringBootVue整合WebSocket实现前后端消息推送&#xff1a; SpringBootVue整合WebSocket实现前后端消息推送_websocket vue3.0 springboot 往客户端推送-CSDN博客 上面实现ws推送数据流程后&#xff0c;需要在windows上使用ws客户端定时记录收到的数据到文件中&#x…...

Jenkins修改全局maven配置后不生效解决办法、以及任务读取不同的settings.xml文件配置

一、修改Global Tool Configuration的maven配置不生效 说明&#xff1a;搭建好jenkins后&#xff0c;修改了全局的settings.xml&#xff0c;导致读取settings一直是之前配置的。 解决办法一 Jenkins在创建工作任务时&#xff0c;会读取当前配置文件内容&#xff0c;固定在这…...

【elfboard linux开发板】7.i2C工具应用与aht20温湿度寄存器读取

1. I2C工具查看aht20的温湿度寄存器值 1.1 原理图 传感器通过IIC方式进行通信&#xff0c;连接的为IIC1总线&#xff0c;且设备地址为0x38&#xff0c;实际上通过后续iic工具查询&#xff0c;这个设备是挂载在iic-0上 1.2 I2C工具 通过i2c工具可以实现查询i2c总线、以及上面…...

LeetCode-有效的字母异位词(242)

题目描述&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 思路&#xff1a; 这题还是比较简单的&#xff0c;首先将两个字符…...

【AIGC-图片生成视频系列-6】SSR-Encoder:用于主题驱动生成的通用编码器

目录 一. 贡献概述 二. 方法详解 a) 训练阶段 b) 推理生成阶段&#xff1a; 三. 综合结果 四. 注意力可视化 五. 选择性主题驱动图像生成 六. 人体图像生成 七. 可推广到视频生成模型 八. 论文 九. 个人思考 稳定扩散&#xff08;Stable Diffusion&#xff09;模型可…...

[C]jupyter中使用C

[C]jupyter中使用C 安装使用用处 安装 https://github.com/brendan-rius/jupyter-c-kernel 下拉找到3条命令&#xff0c;装就可以了 mac和linux可用 python3可用&#xff0c; 2不可以 第二条命令可以改为 : python3 install_c_kernel 小总结&#xff1a;如果有问题&#xff0…...

探讨一下WebINFO 下的一些思考

在平时的开发中&#xff0c;我们经常看到一个/WEB-INF 这个目录&#xff0c;这个是web 容器初始化加载的一个标准路径。官方解释&#xff1a;WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问&#xff0c;只有服务端可以访问的目录。也就是说&#xff0c;这…...

MySQL中的开发基于Python的SQL工具类操作数据库简单示例

操作数据库封装SQL工具类的两种方式 为了更方便的实现基于连接池和pymysql 连接数据库&#xff0c;需开发一个sql工具类来让sql操作更简洁用两张方式来封装SQL工具类 1 &#xff09;单例模式 封装 db.py 工具类 import pymysql from dbutils.pooled_db import PooledDBclas…...

安卓Android Studio读写FM1208CPU卡源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.6c46789elLwMzv&id615391857885 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout x…...

二、Redis的特性与应用场景

Redis是一个在内存中存储数据的中间件&#xff0c;主要用于作为数据库、数据缓存&#xff0c;在分布式系统中有着非常重要的地位。面试中可以围绕Redis的特性进行介绍。 一、Redis特性 1、在内存中存储数据 MySQL主要是“表”的方式来存储组织数据的&#xff0c;是“关系型数…...

编程笔记 html5cssjs 019 HTML实体

编程笔记 html5&css&js 019 HTML实体 一、HTML 字符实体二、HTML 符号实体小结 在HTML文档中&#xff0c;用一些标记表示特定的格式&#xff0c;那我们想使用这些标记字符本身时就出了问题&#xff0c;直接使用时&#xff0c;会被浏览器解析为标记的&#xff0c;要想显…...

HunyuanVideo-Foley环境音生成挑战赛:最佳提示词与生成作品赏析

HunyuanVideo-Foley环境音生成挑战赛&#xff1a;最佳提示词与生成作品赏析 1. 挑战赛背景与规则 最近&#xff0c;一场以"城市夜晚"为主题的HunyuanVideo-Foley环境音生成挑战赛吸引了众多音频创作者参与。这场赛事要求参赛者使用HunyuanVideo-Foley系统&#xff…...

3步搞定黑苹果:OpCore-Simplify自动化配置工具深度体验

3步搞定黑苹果&#xff1a;OpCore-Simplify自动化配置工具深度体验 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而头痛不已…...

Windows下QGIS 3.28.6二次开发环境配置避坑指南(Qt5.15+VS2022实战)

Windows下QGIS 3.28.6二次开发环境配置实战&#xff1a;Qt5.15与VS2022深度适配指南 当GIS开发者决定在Windows平台进行QGIS二次开发时&#xff0c;版本兼容性问题往往成为第一道门槛。本文将深入剖析Qt5.15与Visual Studio 2022的组合在QGIS 3.28.6开发中的关键配置细节&#…...

Cesium实战:手把手教你实现智慧城市中的动态流动线(附完整代码与避坑指南)

Cesium实战&#xff1a;打造智慧城市动态流动线的完整技术方案 在数字孪生和智慧城市可视化项目中&#xff0c;动态流动线是实现交通流、管网流向等动态效果的关键元素。本文将深入探讨如何基于Cesium引擎&#xff0c;从Shader编写到前端集成&#xff0c;构建高性能的动态线可视…...

ESP32S3端口死活不识别?别急着换线,先试试这个USB驱动修复大法

ESP32S3端口识别难题&#xff1a;从底层原理到实战修复的全方位指南 当你满怀期待地将ESP32S3开发板连接到电脑&#xff0c;准备开始物联网项目的开发时&#xff0c;却发现设备管理器里怎么也找不到对应的COM端口——这种挫败感我深有体会。作为一款功能强大的Wi-Fi/蓝牙双模芯…...

从MySQL/Oracle迁移到达梦DM8,我踩过的那些坑和高效避坑指南

从MySQL/Oracle迁移到达梦DM8&#xff1a;实战避坑与高效适配指南 当国产化浪潮席卷关键行业基础设施&#xff0c;达梦数据库作为信创生态的核心成员&#xff0c;正成为越来越多企业技术栈中的必选项。我曾主导过三个大型项目的数据库国产化迁移工作&#xff0c;从最初的磕磕绊…...

Vue3+Tauri实战:从零构建桌面聊天应用,仿微信核心功能解析

1. 为什么选择Vue3Tauri开发桌面应用 最近两年桌面应用开发领域出现了一个有趣的现象&#xff1a;传统Electron应用虽然依然流行&#xff0c;但开发者们开始寻找更轻量、性能更好的替代方案。这就是Tauri逐渐受到关注的原因。作为一个长期使用Electron的老手&#xff0c;我第一…...

若依前后端分离系统在Linux生产环境的高效部署指南

1. 环境准备与依赖安装 在Linux生产环境部署若依前后端分离系统前&#xff0c;需要确保服务器具备完整的运行环境。我遇到过不少部署失败案例&#xff0c;90%都是因为基础环境配置不完整导致的。下面这些组件缺一不可&#xff1a; JDK 1.8&#xff1a;若依系统基于Java开发&am…...

SDMatte代码解读:关键模块架构分析与核心算法实现

SDMatte代码解读&#xff1a;关键模块架构分析与核心算法实现 1. 项目背景与核心价值 SDMatte是一个开源的图像抠图工具&#xff0c;基于深度学习技术实现高质量的自动背景分离。相比传统方法&#xff0c;它能够更准确地处理复杂边缘&#xff08;如头发、透明材质等&#xff…...

RAG系统意图识别模块设计与实现思路

前言在RAG&#xff08;检索增强生成&#xff09;系统的实际应用中&#xff0c;我们经常会遇到一个问题&#xff1a;所有用户问题都走相同的检索-生成流程。这会导致闲聊问题浪费检索资源、分析型问题检索不足、操作型问题无法正确处理等一系列问题。本文将介绍如何在RAG系统中加…...