Go语言去除单词首尾特殊字符:现有实现的优化方案问询
Go 单词首尾特殊字符清理的优化实现方案
你的实现逻辑是没问题的,不过Go标准库提供了更简洁的方式——strings.TrimFunc,它可以直接接收一个判断函数来决定哪些字符需要被移除,刚好能满足你用预定义字符集合(unicode.Letter)的需求。
strings.TrimFunc会遍历字符串的首尾,只要字符满足判断函数的条件(这里就是非字母字符)就会被移除,直到遇到第一个不满足条件的字符为止,中间的字符不会被处理,完全符合你的需求:比如"back-to-back"里的连字符会被保留,首尾的特殊字符才会被清理。
优化后的代码如下:
import ( "strings" "unicode" ) func TrimWord(s string) string { return strings.TrimFunc(s, func(r rune) bool { return !unicode.IsLetter(r) }) }
对比说明
- 代码更简洁:不需要手动维护prefix和suffix变量,也不用写两个循环,逻辑更直观
- 效率相当:
strings.TrimFunc的底层实现和你的思路类似,都是遍历首尾字符直到遇到目标字符,性能上和你的实现几乎没有差异 - 兼容性更好:直接接收字符串作为参数,不需要先转成[]rune,使用起来更方便(如果你的输入原本是字符串的话)
测试示例:
- 输入
".-hello,"→ 输出"hello" - 输入
"back-to-back"→ 输出"back-to-back"
完全符合你的需求。
内容的提问来源于stack exchange,提问作者Mikkel
相关产品推荐
相关产品推荐

