Kotlin 字符串空或NULL筛选

xzbxzb 安卓 2025-12-03 19 0
我程序中的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 后空字符串(更严谨)

如果需要同时覆盖两种情况:
  1. Note 本身为 null

  2. 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() 更实用,因为会忽略空格)


 您阅读本篇文章共花了: 

版权声明

本文章如果涉及侵权,请联系我。
部分文章系本人原创未经许可,不得转载。

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址