字符串附加Null Check Kotlin

时间:2018-10-26 10:48:29

标签: kotlin

用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时,我还要添加一个空格和逗号。

2 个答案:

答案 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