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
相关产品推荐
相关产品推荐

