【发布时间】:2025-12-15 19:10:01
【问题描述】:
在 Kotlin 中如何从字符串中解析双精度数或浮点数,如下所示:
var st: String? = "90 min"
尝试使用 toDoubleOrNull 但总是返回 0 或 null。
【问题讨论】:
在 Kotlin 中如何从字符串中解析双精度数或浮点数,如下所示:
var st: String? = "90 min"
尝试使用 toDoubleOrNull 但总是返回 0 或 null。
【问题讨论】:
如果您确定数字始终位于开头,则使用split() 和空格作为分隔符,并从返回的列表中取出第一项并将其解析为Double:
val value = st!!.split(" ")[0].toDoubleOrNull()
如果开头或中间有空格,请使用:
val value = st!!.trim().split("\\s+".toRegex())[0].toDoubleOrNull()
substringBefore() 的另一种方式:
val value = st!!.trim().substringBefore(" ").toDoubleOrNull()
或者如果字符串中只有 1 个整数,则使用 replace() 删除每个非数字字符:
val value = st!!.replace("\\D".toRegex(), "").toDoubleOrNull()
【讨论】:
你可以试试(假设你的字符串中只有一个数字序列)。
否则,请查看其他答案
val inputString = "123. Test"
val regex = "\\d+(\\.\\d+)?".toRegex()
val match = regex.find(inputString)
if (match != null) {
println("Result: " + match.value)
} else {
println("Result: Not found")
}
【讨论】:
这应该可以...
val pattern = Pattern.compile("\\d+") // the regex
val matcher = pattern.matcher("hello123hgj") // your string
val doubles = ArrayList<Double>() // results
while (matcher.find())
{ // for each match
doubles.add(Double.parseDouble(matcher.group())) // convert to double
}
【讨论】:
这取决于你需要什么。如果你只需要得到 90 并且字符串总是以同样的方式格式化,你就可以
var string = "90 min"
var floatFromString = string.substring(0,2).toFloat()
但最好学习如何使用 LocalDate 和 DateTimeFormatter
【讨论】:
"9999 min"、"area 51"、"3 boys"、"test 123 test" 之一,此实现将如何失败