我正在Kotlin的一个控制台应用程序上工作,我接受main()
函数中的多个参数
fun main(args: Array<String>) {
// validation & String to Integer conversion
}
我想检查String
是否是有效整数并转换为相同的,否则我必须抛出一些异常。
我该如何解决这个问题?
答案 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
。