Kotlin 字符串空或NULL筛选
摘要:我程序中的Note 可能为 null,直接调用 trim( 会抛出空指针异常。需要先处理 null 情况,再处理空字符串,推荐以下两种简洁且安全的写法:写法 1:先处理 null,再处理空字符串(推荐)tvOtherAbout.text = it.Note?.trim( &nb...
我程序中的Note 可能为 null,直接调用 trim() 会抛出空指针异常。需要先处理 null 情况,再处理空字符串,推荐以下两种简洁且安全的写法:
写法 1:先处理 null,再处理空字符串(推荐)
tvOtherAbout.text = it.Note?.trim() ?: "无备注"
解析:
it.Note?.trim():用安全调用 ?.,如果 Note 是 null,整体结果直接为 null;如果非空则执行 trim()
?: "无备注":Elvis 运算符,当左边结果为 null(包括 Note 本身为 null,或 trim() 后为空字符串?不,这里要注意:trim() 后为空字符串不会触发 Elvis,继续看写法 2)
写法 2:同时处理 null 和 trim 后空字符串(更严谨)
如果需要同时覆盖两种情况:
Note 本身为 null
Note 非空但 trim 后为空字符串(比如 " " 这种空白字符)
tvOtherAbout.text = it.Note?.trim().takeIf { it.isNullOrNotEmpty() } ?: "无备注"解析:
it.Note?.trim():安全调用 trim,避免 null 崩溃
takeIf { it.isNullOrNotEmpty() }:只有当结果非 null 且非空时才保留原结果,否则返回 null
?: "无备注":最终兜底,只要前面结果为 null,就显示 "无备注"
写法 3:更直观的 if-else 形式(适合新手理解)
tvOtherAbout.text = if (it.Note.isNullOrBlank()) {
"无备注"
} else {
it.Note.trim()
}解析:
isNullOrBlank():Kotlin 内置扩展函数,同时判断 null 和空白字符串(包括全是空格的情况)
逻辑清晰:如果是 null 或空白,显示 "无备注",否则 trim 后赋值
推荐优先级:
追求简洁用 写法 1(如果确定 Note 非空时不会是纯空白字符串)
追求严谨用 写法 2 或 写法 3(覆盖所有异常情况)
核心知识点:
安全调用 ?.:避免 null 调用方法的崩溃
Elvis 运算符 ?::null 兜底
isNullOrBlank():同时判断 null 和空白字符串(比 isNullOrEmpty() 更实用,因为会忽略空格)
博易阁版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

