在Kotlin中,如何像这样从字符串中解析一个双精度或浮点数:
var st: String? = "90 min"
尝试使用toDoubleOrNull,但始终返回0或null。
答案 0 :(得分:2)
如果您确定数字始终在开头,请使用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()
答案 1 :(得分:1)
您可以尝试(假设您的字符串中只有一个数字序列)。
否则,请检查其他答案
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")
}
答案 2 :(得分:0)
这应该有效...
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
}
答案 3 :(得分:-1)
这取决于您的需求。如果您只需要获得90并且字符串总是以相同的方式格式化
var string = "90 min"
var floatFromString = string.substring(0,2).toFloat()
但是最好学习如何使用LocalDate和DateTimeFormatter