如何在 Kotlin 中将 String 转换为 Int?
Posted
技术标签:
【中文标题】如何在 Kotlin 中将 String 转换为 Int?【英文标题】:How to convert String to Int in Kotlin? 【发布时间】: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了。
【参考方案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
【讨论】:
同样可以在***.com/a/54718406/2987755找到【参考方案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”的字符串设置默认值。
【讨论】:
以上是关于如何在 Kotlin 中将 String 转换为 Int?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kotlin 中将 Firestore 日期/时间戳转换为日期?
如何在 Kotlin 中将数据类转换为 ByteBuffer?
如何在 Kotlin 中将 ArrayList 转换为 JSONArray()