Kotlin如何通过运算符重载与for循环移除单词中的指定字符
问题核心错误分析
- 重载逻辑倒置:当前
String.minus()实现没有处理原字符串,反而对入参filter1做操作,完全不符合「原字符串移除指定字符」的需求 - 入参类型不匹配:重载方法接收的是
String类型参数,但实际使用时想要传入单个Char类型的待移除字符 - 循环逻辑无意义:main函数中的for循环仅调用了
Char.minus(),没有存储运算结果,也没有输出,执行后无任何效果 - 未满足要求:当前实现既没有用for循环做字符过滤逻辑,也没有正确实现运算符重载的业务语义
正确实现思路
- 重载
String的minus运算符,入参为待移除的Char类型字符 - 在重载方法内部使用for循环遍历原字符串的每一个字符
- 遍历过程中跳过和待移除字符相等的字符,将剩余字符拼接为新字符串返回
- 直接使用
字符串 - 待移除字符的语法调用重载运算符即可得到结果
可运行的实现代码
// 重载String的-运算符,接收Char类型的待移除字符 operator fun String.minus(charToRemove: Char): String { var result = "" // 使用for循环遍历原字符串所有字符 for (c in this) { // 仅保留和待移除字符不相等的字符 if (c != charToRemove) { result += c } } return result } fun main() { val wortHW1 = "Hallo" val wortHW2 = "Hallo World" // 调用重载的-运算符移除字符l val result1 = wortHW1 - 'l' val result2 = wortHW2 - 'l' println(result1) // 输出:Hao println(result2) // 输出:Hao Word }
额外说明
如果需要一次移除多个指定字符,只需调整重载方法的入参为字符串或字符集合,内部循环判断逻辑做对应调整即可,核心的for循环遍历+运算符重载的逻辑不变。
内容的提问来源于stack exchange,提问作者DroidMe
相关产品推荐
相关产品推荐

