如何使用Kotlin何时查找字符串是否为数字?
我想在Kotlin中使用一个when()
expression式来从一个函数返回不同的值。 输入是一个String
,但它可以解析为一个Int
,所以我想返回解析的Int
如果可能的话,或者一个String
如果不是。 由于输入是一个String
我不能使用is型检查expression式。
有没有什么惯用的方法来实现呢?
编辑:我的问题是如何的when()
expression式应该看起来像,而不是关于返回types。
使用toIntOrNull
和when
:
fun intOrString(str: String): Any { val v = str.toIntOrNull() return when(v) { null -> str else -> v } } fun main(args: Array) { println(intOrString("4")) // prints 4 println(intOrString("x")) // prints x }
如果toIntOrNull
不可用,请使用普通的旧exception处理:
fun intOrString(str: String) = try { // returns Any str.toInt() } catch(e: NumberFormatException) { str }
注意:因为OP要求,所以我用了。 elvis操作符( ?:
:)肯定会更合适。
kotlin.text
包中的toIntOrNull
函数(在kotlin-stdlib
)可能是你正在寻找的东西:
toIntOrNull
fun String.toIntOrNull(): Int? (source)
平台和版本要求:Kotlin 1.1
将字符串解析为一个Int数字,并返回结果;如果该字符串不是数字的有效表示forms,则返回null。
fun String.toIntOrNull(radix: Int): Int? (source)
平台和版本要求:Kotlin 1.1
将字符串解析为一个Int数字,并返回结果;如果该字符串不是数字的有效表示forms,则返回null。
更多信息: https : //kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/to-int-or-null.html