Kotlin从字符串解析双精度

时间:2019-07-03 10:03:30

标签: android kotlin

在Kotlin中,如何像这样从字符串中解析一个双精度或浮点数:

var st: String? = "90 min"

尝试使用toDoubleOrNull,但始终返回0或null。

4 个答案:

答案 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