所以我有一个字符串我想检查是否应该拆分成两个,或者返回一些默认值。像这样:
val myString = "firstPart-secondPart"
val (first, second) = when (myString.contains("-")) {
true -> myString.split('-', limit = 2)
else -> ?? <-- How would i return ("Default1", "Default2") so the destructuring still works?
}
所以我的问题是,我如何返回两个默认字符串,以便解构有效?我之前使用过String.split()
来解构它并且非常好。
答案 0 :(得分:13)
您需要返回与上述类型匹配的类型,split返回一个列表,因此您可以使用:
listOf("Default1", "Default2")
val myString = "firstPart-secondPart"
val (first, second) = when (myString.contains("-")) {
true -> myString.split('-', limit = 2)
else -> listOf("Default1", "Default2")
}
当两个分支返回List<String>
时,您可以将整个块视为List<String>
,因此可以对其进行解构以从中获取值。
val myString = "firstPart-secondPart"
val (first, second) = when {
myString.contains("-") -> myString.split('-', limit = 2)
else -> listOf("Default1", "Default2")
}
这可能更有意义,假设您要添加更多条件,否则if可能更有意义。
答案 1 :(得分:1)
作为jrtapsell的正确答案的替代方法,您可以使用结构化Pair
s:
val (first, second) = when (myString.contains("-")) {
true -> myString.split('-', limit = 2).let { it[0] to it[1] }
else -> "Default1" to "Default2"
}
注1:带有两个元素的结果列表在let
的帮助下转换为Pair
。
注意2:infix function to
用于在此创建Pair
。