【问题标题】:How to convert String to Int in Kotlin?如何在 Kotlin 中将 String 转换为 Int?
【发布时间】:2022-01-02 19:26:41
【问题描述】:

我正在 Kotlin 中开发一个控制台应用程序,我在 main() 函数中接受多个参数

fun main(args: Array<String>) {
    // validation & String to Integer conversion
}

我想检查 String 是否是一个有效的整数并转换它,否则我必须抛出一些异常。

我该如何解决这个问题?

【问题讨论】:

  • 使用String.toInt(),将其包裹在try-catch中并处理NumberFormatException
  • 感谢您的回复,但我发现没有可用的String.toInt()
  • 这不是静态方法,您必须在您的 String 实例上调用 toInt()。例如args[0].toInt().
  • 谢谢,成功了。仍在使用 try-catch 块。
  • 你也可以使用toIntOrNull得到Int?的结果,这样你就不必使用try-catch了。

标签: kotlin


【解决方案1】:

您可以在您的 String 实例上调用 toInt()

fun main(args: Array<String>) {
    for (str in args) {
        try {
            val parsedInt = str.toInt()
            println("The parsed int is $parsedInt")
        } catch (nfe: NumberFormatException) {
            // not a valid int
        }
    }
}

或者toIntOrNull()作为替代:

for (str in args) {
    val parsedInt = str.toIntOrNull()
    if (parsedInt != null) {
        println("The parsed int is $parsedInt")
    } else {
        // not a valid int
    }
}

如果您不关心无效值,则可以将toIntOrNull() 与安全调用运算符和范围函数结合使用,例如:

for (str in args) {
    str.toIntOrNull()?.let {
        println("The parsed int is $it")
    }
}

【讨论】:

    【解决方案2】:
    val i = "42".toIntOrNull()
    

    请记住,顾名思义,结果可以为空。

    【讨论】:

      【解决方案3】:

      我会选择这样的。

      import java.util.*
      
      fun String?.asOptionalInt() = Optional.ofNullable(this).map { it.toIntOrNull() }
      
      fun main(args: Array<String>) {
          val intArgs = args.map {
              it.asOptionalInt().orElseThrow {
                  IllegalArgumentException("cannot parse to int $it")
              }
          }
      
          println(intArgs)
      }
      

      这是一种很好的方法,不会引入不安全的可空值。

      【讨论】:

      • 感谢您的回复。我是 Kotlin 的新手,能否请您添加一些 cmets 来解释提供的代码?这也可能对其他人有所帮助
      • 这只是写it.toIntOrNull() ?: throw IllegalArgumentException("cannot parse to int $it")的一种更长更慢的方式。
      【解决方案4】:

      其实有几种方法:

      给定:

      var numberString : String = "numberString" 
      // number is the int value of numberString (if any)
      var defaultValue : Int    = defaultValue
      

      那么我们有:

      Operation Numeric value Non-numeric value
      numberString.toInt() number NumberFormatException
      numberString.toIntOrNull() number null
      numberString.toIntOrNull() ?: defaultValue number defaultValue

      如果numberString 是一个有效整数,我们得到number,否则在Non-numeric value 列中看到结果。

      【讨论】:

      • 一张表不容易看懂。请添加列标题。什么是真假?
      • 嗨 CoolMind,第一行是列标题,它回答了问题(numberString 是一个有效数字)是真还是假
      • 对不起,我又没那么容易理解表格,所以编辑了答案。
      【解决方案5】:

      如上所述,使用toIntOrNull()

      将字符串解析为 [Int] 数字并返回结果 或 null 如果字符串不是数字的有效表示。

      val a = "11".toIntOrNull()   // 11
      val b = "-11".toIntOrNull()  // -11
      val c = "11.7".toIntOrNull() // null
      val d = "11.0".toIntOrNull() // null
      val e = "abc".toIntOrNull()  // null
      val f = null?.toIntOrNull()  // null
      

      【讨论】:

        【解决方案6】:
        fun getIntValueFromString(value : String): Int {
            var returnValue = ""
            value.forEach {
                val item = it.toString().toIntOrNull()
                if(item is Int){
                    returnValue += item.toString()
                }
        
            }
            return returnValue.toInt()
        
        }
        

        【讨论】:

        • 请不要只发布代码作为答案,而是要说明代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。
        【解决方案7】:

        我使用这个 util 函数:

        fun safeInt(text: String, fallback: Int): Int {
            return text.toIntOrNull() ?: fallback
        }
        

        【讨论】:

        【解决方案8】:
        string_name.toString().toInt()
        

        string_name 转换为String,然后将生成的String 转换为int

        【讨论】:

        • 为什么要拨打toString()?提问者已经有一个字符串可以使用。
        • 虽然这段代码可以为这个问题提供一个解决方案,但最好添加上下文来说明它为什么/如何工作。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。解释代码时,您也可能会得到用户的积极反馈/赞成。
        【解决方案9】:

        在 fun toInt() 之前添加 (?)

        val number_int = str?.toInt()

        【讨论】:

          【解决方案10】:

          在 Kotlin 中:

          只需这样做

          val abc = try {stringNumber.toInt()}catch (e:Exception){0}
          

          在 catch 块中,您可以为任何不转换为“Int”的字符串设置默认值。

          【讨论】:

            猜你喜欢
            • 2018-01-31
            • 1970-01-01
            • 1970-01-01
            • 2013-10-31
            • 1970-01-01
            • 2010-11-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多