Golang如何实现保留字符串首尾字符、替换中间内容为星号?
问题分析
你现有代码存在3个核心问题:
- 语法错误:变量声明缺右括号、循环初始化语句的
0l应为0; - 逻辑缺失:没有拼接字符串的最后一位字符
- 未做边界处理:当字符串长度小于等于2时会出现错误输出
正确实现方案
核心思路是先将字符串转为rune切片处理多字节字符,再按长度分场景处理:
import "strings" func maskString(username string) string { runeArr := []rune(username) runeLen := len(runeArr) // 长度小于等于2时不需要加星号,直接返回原字符串 if runeLen <= 2 { return username } // 首字符 + (总长度-2)个星号 + 尾字符 return string(runeArr[0]) + strings.Repeat("*", runeLen-2) + string(runeArr[runeLen-1]) }
用标准库
strings.Repeat生成星号串,比循环拼接性能更高,代码更简洁。
测试验证
你给出的示例测试结果完全符合预期:
- 输入
handsome:rune长度为8,输出h******e - 输入
한국어:rune长度为3,输出한*어
内容的提问来源于stack exchange,提问作者jexists
相关产品推荐
相关产品推荐

