Kotlin - 字符文字不符合预期类型 Int

Kotlin - The caracter literal does not conform expect type Int

我在我的程序中遇到类型问题,我被要求先在 JS 中完成它并且它工作正常但现在我无法实现结果。 你觉得我应该再做一个 'algorithm' 吗?预先感谢您的宝贵时间。

fun main(){
    // the idea is to put numbers in a box
    // that cant be larger than 10
    val data = "12493419133"
    var result = data[0]
    var currentBox = Character.getNumericValue(data[0])
    var i = 1

    while(i < data.length){

        val currentArticle =  Character.getNumericValue(data[i])
         currentBox += currentArticle

        println(currentBox)

        if(currentBox <= 10){
            result += Character.getNumericValue(currentArticle)
        }else{
            result += '/'
            //var resultChar = result.toChar()
            // result += '/'
            currentBox = Character.getNumericValue(currentArticle)
            result += currentArticle
        }
        i++
    }
    print(result) //should print 124/9/341/91/33
}

结果实际是Char类型,重载运算符函数+只接受Int自增ASCII值得到新的Char。

public operator fun plus(other: Int): Char

用惯用的Kotlin方式解决你的问题:

fun main() {
    val data = "12493419133"

    var counter = 0
    val result = data.asSequence()
        .map(Character::getNumericValue)
        .map { c ->
            counter += c
            if (counter <= 10) c.toString() else "/$c".also{ counter = c }
        }
        .joinToString("")  // terminal operation, will trigger the map functions

    println(result)
}

编辑: 如果 data 太大,您可能需要使用 StringBuilder,因为它不会在每次迭代字符时都创建字符串,并且你可以使用 list.fold()

而不是使用你自己的计数器
fun main() {
    val data = "12493419133"

    val sb = StringBuilder()
    data.fold(0) { acc, c ->
        val num = Character.getNumericValue(c)
        val count = num + acc
        val ret = if (count > 10) num.also { sb.append('/') } else count
        ret.also { sb.append(c) }  // `ret` returned to ^fold, next time will be passed as acc
    }

    println(sb.toString())
}

如果您想要 List<Char> 中的结果,请输入:

val data = "12493419133"
val result = mutableListOf<Char>()
var sum = 0
data.asSequence().forEach {
    val v = Character.getNumericValue(it)
    sum += v
    if (sum > 10) {
        result.add('/')
        sum = v
    }
    result.add(it)
}
println(result.joinToString(""))