如何使用Kotlin何时查找字符串是否为数字?

我想在Kotlin中使用一个when()expression式来从一个函数返回不同的值。 输入是一个String ,但它可以解析为一个Int ,所以我想返回解析的Int如果可能的话,或者一个String如果不是。 由于输入是一个String我不能使用is型检查expression式。

有没有什么惯用的方法来实现呢?

编辑:我的问题是如何的when()expression式应该看起来像,而不是关于返回types。

使用toIntOrNullwhen

 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