用NULL检查附加String的理想方法是什么?也许这是一个愚蠢的问题,但是我很好奇知道最好的方法。
我尝试了这些
HEADER
{
"alg": "RS256",
"typ": "JWT",
"use": "sig",
"x5c": [
"XXXXXXXXXXXX.....
]
)
PAYLOAD
{
"iat": 1533642657,
"exp": 1549772657,
"sub": "ABCDE"
}
输出
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) }
目的
我有位置数据类,因为我有address_line_1,城市,州,国家等。
我想获取完整的地址字符串,并在所有字段中附加null检查。请注意,当value不为Null时,我还要添加一个空格和逗号。
答案 0 :(得分:4)
反问:您想附加什么?您的喜好是什么?
如果需要默认值,请使用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
中使用。
答案 1 :(得分:1)
使用这种逻辑
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