题目
使用strings包统计字符串中的单词数量
信息
- 类型:问答
- 难度:⭐
考点
strings包使用,字符串处理,基础函数应用
快速回答
使用strings.Fields函数可以高效统计单词数量:
- 导入
strings包 - 调用
strings.Fields(input)分割字符串 - 返回切片长度即为单词数
示例代码:count := len(strings.Fields("Go is awesome!")) // 返回3
解析
问题场景
在实际开发中经常需要处理文本数据,例如统计用户输入、日志分析等场景。本题要求统计以空格分隔的单词数量,是字符串处理的典型用例。
核心解决方案
使用strings.Fields函数是最佳实践:
package main
import (
"fmt"
"strings"
)
func countWords(s string) int {
words := strings.Fields(s)
return len(words)
}
func main() {
input := "Go语言的标准库设计精妙"
fmt.Println(countWords(input)) // 输出:4
}原理说明
- strings.Fields原理:按Unicode空格(包括\t, \n, \v, \f, \r, 空格)分割字符串
- 自动处理:忽略连续空格和首尾空格,无需额外trim操作
- 返回值:返回[]string切片,每个元素是一个单词
最佳实践
- 优先使用标准库函数而非手动循环,保证性能和正确性
- 处理中文等Unicode字符时无需特殊处理
- 对空字符串返回0(安全处理边界情况)
常见错误
| 错误方法 | 问题 | 修正方案 |
|---|---|---|
| 手动循环计数空格 | 无法处理连续空格/中文 | 统一使用Fields |
| 使用strings.Split(" ") | 产生空字符串元素 |
扩展知识
- FieldsFunc:自定义分隔符,如按逗号分割:
words := strings.FieldsFunc(s, func(r rune) bool { return r == ',' }) - 性能对比:Fields比正则表达式快10倍以上
- 相关函数:
- TrimSpace:单独去除首尾空格
- Split:固定分隔符分割(可能产生空元素)
进阶思考
如果需要统计非空格分隔的单词(如中文文本),可使用:words := strings.FieldsFunc(s, unicode.IsSpace)