运行Kotlin自定义字符串函数时为何输出空白?
提取字符串唯一字符输出空白的问题修复
问题出在哪
Kotlin里的String是不可变类型,plus()方法不会修改原字符串,只会返回一个新的字符串实例。你用val声明的updatedString初始是空字符串,每次调用updatedString.plus(c)时,新生成的字符串根本没存回变量里,所以最后打印的还是初始的空值。
两种修复方法
方法一:改用可变变量存结果
把updatedString改成var,每次拼接后把新值赋值给它:
fun uniqueChar(s: String){ var updatedString = "" s.forEach {c -> if (!updatedString.contains(c)){ updatedString = updatedString.plus(c) } } println(updatedString) }
方法二:用StringBuilder提升性能
频繁拼接字符串时,StringBuilder比直接用plus()更高效,能避免重复创建String实例:
fun uniqueChar(s: String){ val sb = StringBuilder() s.forEach {c -> if (!sb.contains(c)){ sb.append(c) } } println(sb.toString()) }
测试结果
调用uniqueChar("fhfnfnfjuw")会输出fhjuw,符合提取唯一字符的需求。
内容的提问来源于stack exchange,提问作者OEThe11
相关产品推荐
相关产品推荐

