Как преобразовать String в Int в Kotlin?
Я работаю над консольным приложением в Kotlin, где я принимаю несколько аргументов в функции main()
fun main(args: Array<String>) {
// validation & String to Integer conversion
}
Я хочу проверить, является ли String
действительным целым числом, и преобразовать то же самое, или же мне нужно вызвать какое-то исключение.
Как я могу решить это?
Ответы
Ответ 1
Вы можете вызвать 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")
}
}
Ответ 2
val i = "42".toIntOrNull()
Имейте в виду, что результат обнуляем, как следует из названия.
Ответ 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 |
+—————————————————————————————————————————————+——————————+———————————————————————+
Ответ 4
я бы пошел с чем-то вроде этого.
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)
}
это довольно хороший способ сделать это, не вводя небезопасные значения с нулевым значением.
Ответ 5
Как предложено выше, используйте toIntOrNull()
.
Разбирает строку как число [Int] и возвращает результат или null
, если строка не является допустимым представлением числа.
val a: Int? = "11".toIntOrNull() // 11
val b: Int? = "abc".toIntOrNull() // null
val c: Int? = null?.toIntOrNull() // null