You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin字符串编译报错:无法解析引用,接收者类型不匹配求助

问题分析与解决

错误原因

Kotlin中的String是不可变类型,不存在通过下标直接修改字符的操作。编译报错里提到的set(index: Int, value: Char)方法属于StringBuilder类,而非String,你试图用String对象调用这个方法,就会出现接收器类型不匹配的错误。

你的代码里初始化even和odd时直接赋值为原text(String类型),之后试图通过even[i] = ...修改字符,这完全违背了String不可变的特性,自然无法通过编译。

修正后的代码

fun capitalize(text: String): List<String> {
    val even = StringBuilder(text)
    val odd = StringBuilder(text)
    for (i in text.indices) {
        val upperChar = text[i].uppercaseChar()
        if (i % 2 == 0) {
            even[i] = upperChar
        } else {
            odd[i] = upperChar
        }
    }
    return listOf(even.toString(), odd.toString())
}

关键修正点

  • 用StringBuilder替代String初始化even和odd:StringBuilder是可变字符序列,支持通过下标修改字符的操作,符合你需要的修改逻辑
  • 改用text.indices遍历:替代0 until text.length,写法更简洁且能避免数组越界风险
  • 替换uppercase()为uppercaseChar():原text[i].uppercase()返回的是String类型,而StringBuilder的set方法需要Char类型,用uppercaseChar()可以直接得到目标字符,避免类型不匹配问题

内容的提问来源于stack exchange,提问作者darten125

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:22:08