[英]String append with Null Check Kotlin
用NULL检查附加String的理想方法是什么? 也许这是愚蠢的问题,但我很好奇知道最好的方法。
我尝试过这些
fun main(args: Array<String>) {
val foo: String? = null
val bar = "bar"
println("__println(\"\$foo \$bar\")")
println("$foo $bar")
println("__println((if (foo != null) \"\$foo \" else \"\") + (if (bar != null) \"\$bar \" else \"\"))")
println((if (foo != null) "$foo " else "") + (if (bar != null) "$bar " else ""))
println("__println((\"\$foo \" ?: \"\") + (\"\$bar \" ?: \"\"))")
println(("$foo " ?: "") + ("$bar " ?: ""))
println("__println((foo ?: \"\") + (bar ?: \"\"))")
println((foo ?: "") + (bar ?: ""))
println("__println(foo + \" \" + bar)")
println(foo + " " + bar)
var string = ""
if (foo != null) string += "$foo, "
if (bar != null) string += "$bar"
println("__println(string)")
println(string)
}
输出量
__println("$foo $bar") null bar __println((if (foo != null) "$foo " else "") + (if (bar != null) "$bar " else "")) bar __println(("$foo " ?: "") + ("$bar " ?: "")) null bar __println((foo ?: "") + (bar ?: "")) bar __println(foo + " " + bar) null bar __println(string) bar
目的
我有位置数据类,因为我有address_line_1,城市,州,国家等。
我想获取完整的地址字符串,并使用null检查附加所有字段。 请注意,当value不为Null时,我还要添加一个空格和逗号。
反问:您想附加什么? 您的喜好是什么?
如果需要默认值,可以使用foo ?: "<default>"
。
如果可以打印null
,那么我就保持它不变,即"$foo $bar"
。
相反,如果您只是想连接可能包含或不包含null
值的字符串列表,那么您可能还会对以下内容感兴趣:
listOfNotNull(foo, bar).joinToString(" ")
现在,关于您对问题的更新...假设数据类如下所示:
data class Location(val line1 : String?, val line2 : String?, val line3part1 : String?, val line3part2 : String?)
假设不应打印空行,则listOfNotNull
的可能用法如下:
with(yourLocation) {
// the outer listOfNotNull contains the lines:
listOfNotNull(
line1,
line2,
// inner ListOfNotNulls are specific concatenations, which may lead to an empty line (that's why takeIf is also here)
listOfNotNull(line3part1, line3part2).takeIf { it.isNotEmpty() }
?.joinToString(" ")
).joinToString("\n")
}.run(::println)
}
如果您需要"($nullable)"
我会寻求:
nullable?.let { "($it)" }
然后可以再次在listOfNotNull
使用listOfNotNull
。
使用这个逻辑
var foo: String? = null
var bar = "bar"
foo?.let { foo += bar }?: run { foo="" }
println(foo) // null not print
foo?.let { bar.let { foo += bar } }
println(foo) //output is bar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.