Как преобразовать символ в его целочисленное значение в котлине? - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь преобразовать строку в целочисленное значение в Kotlin, используя функцию toInt(), которую я нашел в этом ответе , но вместо этого я получаю значение ascii.

Что я делаю не так?

var input = "8569 2478 0383 3437"

val regex = "[^0-9]".toRegex()
var value = regex.replace(input, "")

val iterator = value.iterator()

var sum : Int = 0
var v : Int
for((index, value) in iterator.withIndex()){
    if(index % 2 == 0){
        var v = value.toInt() * 2 
        if(v > 9) v -= 9

        print("$v:$value ")
        sum += v
    }else{
        print("$value ")
        sum += value.toInt()
    }
}

, выполняя этот код выше, это напечатанные цифры

103:8 5 99:6 9 91:2 4 101:7 8 87:0 3 103:8 3 93:3 4 93:3 7

, и я ожидал что-то подобное

8:8 5 6:6 9 2:2 4 7:7 8 0:0 3 8:8 3 3:3 4 3:3 7

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Если вы нацеливаетесь на JVM, вы можете использовать Charcater.getNumbericValue :

val v = Character.getNumericValue(value) * 2

, поэтому нет необходимости делать два приведения.

Если выхочешь быть независимым от платформы, иди с ответом Тодда.

0 голосов
/ 18 сентября 2018

В вашем цикле value - это Char, а toInt() на Char возвращает номер его символа .Поэтому вам нужно преобразовать его в String, чтобы получить его целочисленное представление:

var v = value.toString().toInt() * 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...