如何在Kotlin中将String转换为Int?

时间:2018-05-28 16:19:12

标签: kotlin

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

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

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

我该如何解决这个问题?

8 个答案:

答案 0 :(得分:24)

您可以在toInt()个实例上致电String

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")
    }
}

答案 1 :(得分:6)

val i = "42".toIntOrNull()

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

答案 2 :(得分:3)

实际上,有几种方法:

给出:

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

那么我们有:

+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ?            |  true    | false                 |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toInt()                        |  number  | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toIntOrNull()                  |  number  | null                  |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toIntOrNull() ?: defaultValue  |  number  | defaultValue          |
+—————————————————————————————————————————————+——————————+———————————————————————+

答案 3 :(得分:1)

我会选择这样的东西。

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)
}

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

答案 4 :(得分:1)

如上所述,请使用toIntOrNull()

  

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

val a: Int? = "11".toIntOrNull() // 11
val b: Int? = "abc".toIntOrNull() // null
val c: Int? = null?.toIntOrNull() // null

答案 5 :(得分:1)

我使用以下util函数:

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

答案 6 :(得分:0)

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 :(得分:0)

string_name.toString().toInt()

string_name 转换为 String,然后将结果 String 转换为 int