Котлин разбирай дважды из строки - PullRequest
0 голосов
/ 03 июля 2019

В Kotlin как разобрать двойное число или число с плавающей запятой из строки, например:

var st: String? = "90 min"

пытался использовать toDoubleOrNull, но всегда возвращает 0 или ноль.

Ответы [ 4 ]

2 голосов
/ 03 июля 2019

Если вы уверены, что число всегда в начале, используйте split() с пробелом в качестве разделителя и из возвращенного списка возьмите 1-й элемент и проанализируйте его как 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 голос
/ 03 июля 2019

Вы можете попробовать (при условии, что в вашей строке только одна последовательность чисел).

В противном случае, проверьте другие ответы

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")
}
0 голосов
/ 03 июля 2019

Это должно работать ...

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
}
0 голосов
/ 03 июля 2019

Это зависит от того, что вам нужно.Если вам просто нужно получить 90 и строка всегда форматируется одинаково, вы можете просто

var string = "90 min"
var floatFromString = string.substring(0,2).toFloat()

, но лучше узнать, как использовать LocalDate и DateTimeFormatter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...