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

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

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

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

2 Solutions collect form web for “如何使用Kotlin何时查找字符串是否为数字?”

使用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

  • 返回块中的最后一个expression式
  • 在库模块中使用Kotlin,而不在app模块中使用它
  • 如何在kotlin中获得多维原始数组类?
  • 如何在Kotlin中获得generics参数类
  • Android Kotlin类实现的问题
  • Kotlin中位运算符的计算顺序
  • Kotlingenerics抽象类
  • 如何使用ByteArray.getOrElse
  • 如何在Kotlin中初始化一个引用variables
  • 在KOTLIN中使用Replace函数
  • Kotlin的解构声明有什么意义?
  • Kotlin language will be the best programming language for Android.