您的位置:首页 > 教育 > 培训 > 公司装修设计哪家好_福州网站设计大概多少钱_百度推广投诉人工电话_全国十大跨境电商公司排名

公司装修设计哪家好_福州网站设计大概多少钱_百度推广投诉人工电话_全国十大跨境电商公司排名

2025/5/16 10:55:05 来源:https://blog.csdn.net/longfeng995/article/details/146982567  浏览:    关键词:公司装修设计哪家好_福州网站设计大概多少钱_百度推广投诉人工电话_全国十大跨境电商公司排名
公司装修设计哪家好_福州网站设计大概多少钱_百度推广投诉人工电话_全国十大跨境电商公司排名

目录

1. 官方包

2. 支持版本

3. 官方说明

4. 作用

5. 实现原理

6. 推荐使用场景和不推荐使用场景

推荐场景:

不推荐场景:

7. 使用场景示例

示例1:官方示例

示例2:用户名/密码规范校验(安全场景)

示例3:文本格式化处理(数据清洗场景)

示例4:游戏开发(特殊字符过滤)

8. 性能比较

9. 总结

特性说明

总结对比表

核心逻辑

最终建议


1. 官方包

是的,strings.ContainsRune 是 Go 语言官方标准库 strings 包中的函数,属于核心工具的一部分

2. 支持版本

该函数从 Go 1.0 版本开始提供,并持续支持到最新版本(如 Go 1.22+),兼容所有官方发布的 Go 版本

3. 官方说明

func ContainsRune

func ContainsRune(s string, r rune) bool

英文说明:

ContainsRune reports whether the Unicode code point r is within s.

中文翻译:

ContainsRune报告Unicode码点r是否在s内。

4. 作用

strings.ContainsRune(s string, r rune) bool 的作用是:

检查字符串 s 中是否包含指定的 Unicode 字符(rune 类型)。若存在则返回 true,否则返回 false

关键特性

  • 直接支持 Unicode 字符(如中文、Emoji、特殊符号等)
  • 严格匹配单个 rune,而非子串(区别于 Contains)

5. 实现原理

  1. 遍历字符串:逐个字符解码 s 为 rune 序列(处理 UTF-8 编码)
  2. 字符匹配:比较每个 rune 是否为目标字符 r 相等
  3. 提前终止:找到匹配字符立即返回 true,避免完整遍历
  4. 源码简化逻辑
func containsRune(s string, r rune) bool {for _, c := range s {if c == r {return true}}return false
}

6. 推荐使用场景和不推荐使用场景

推荐场景:

  • 检查字符串是否包含特定 Unicode 字符(如汉字、符号、控制字符等)
  • 需要精确匹配单个字符(而非子串)
  • 高频调用的简单字符检查(性能敏感场景)

不推荐场景:

  • 需要匹配子串(应使用 Contains)
  • 检查字符集合(应使用 ContainsAny 或 ContainsFunc)
  • 复杂条件匹配(如“数字或字母”,改用 ContainsFunc)

7. 使用场景示例

示例1:官方示例

// Finds whether a string contains a particular Unicode code point.
// The code point for the lowercase letter "a", for example, is 97.
fmt.Println(strings.ContainsRune("aardvark", 97))
fmt.Println(strings.ContainsRune("timeout", 97))

运行后输出:

true
false

解析:

根据上面的注释,翻译成中文如下:

//查找字符串是否包含特定的Unicode码位。
//小写字母“a”的编码点,例如,为97。

根据说明,查找的是字符串中是否包含了 "a",而第一个字符串中存在 a,所以为 true

示例2:用户名/密码规范校验(安全场景)

场景:强制要求用户名必须包含大写字母(如至少一个 A-Z)

func hasUpperCase(s string) bool {for _, r := range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" {if strings.ContainsRune(s, r) {return true}}return false
}func main() {fmt.Println(hasUpperCase("Admin"))fmt.Println(hasUpperCase("admin"))
}

运行后输出:

true
false

解析:

因为我们给出的是,必须包含 大写"A-Z",只有第一个是包含了大写 "A",所以为 true,第二个则没有大写字母,则为 false

示例3:文本格式化处理(数据清洗场景)

场景:移除字符串中的所有表情符号(Emoji)

func removeEmoji(s string) string {var builder strings.Builderfor _, r := range s {if !unicode.In(r, unicode.So) {builder.WriteRune(r)}}return builder.String()
}func main() {fmt.Println("Hello😊世界")fmt.Println(removeEmoji("Hello😊世界"))
}

运行后输出:

Hello😊世界
Hello世界

解析:

第一个 fmt.Println() 输出,是包含了 Emoji(笑脸)的

第二个 fmt.Println() 输出,是因为我们的 removeEmoji() 函数做了处理,包含 Emoji 表情包的,都将去除掉,所以仅输出了:Hello世界

示例4:游戏开发(特殊字符过滤)

场景:检查玩家昵称是否包含空格或换行符

func isNicknameValid(s string) bool {forbidden := []rune{' ', '\n', '\t'}for _, r := range forbidden {if strings.ContainsRune(s, r) {return false}}return true
}func main() {fmt.Println(isNicknameValid("Player1"))fmt.Println(isNicknameValid("Player 1"))
}

运行后输出:

true
false

解析:

检测的是条件为:[]rune{' ', '\n', '\t'}

第一个 true 是因为只包含了字母和数字,不符合上面的条件,所以为 true

第二个 false 因为包含了 " " 空格,所以符合,返回 false

8. 性能比较

ContainsRune vs ContainsAny(单字符)

s := "abc"
// ContainsRune
fmt.Println(strings.ContainsRune(s, 'a'))// ContainsAny
fmt.Println(strings.ContainsAny(s, "a"))

性能基准(纳秒/op):

  • ContainsRune:~10 ns(直接匹配)
  • ContainsAny:~15 ns(需解析字符集合)

结论:ContainsRune 略快,适合单字符精准匹配

ContainsRune vs ContainsFunc

s := "abc"
// ContainsRune
fmt.Println(strings.ContainsRune(s, 'a'))// ContainsFunc
fmt.Println(strings.ContainsFunc(s, func(r rune) bool { return r == 'a' }))

性能基准(纳秒/op):

  • ContainsRune:~10 ns
  • ContainsFunc:~50 ns(函数调用开销)

结论:ContainsRune 快 5 倍,优先用于简单字符匹配

ContainsRune vs 手动遍历

s := "abc"
// ContainsRune
fmt.Println(strings.ContainsRune(s, 'a'))// 手动遍历
for _, c := range s {if c == 'a' {fmt.Println(true)}
}

结论:性能几乎相同,但 ContainsRune 代码更简洁

9. 总结

特性说明

特性说明
官方支持Go 标准库函数,长期兼容
核心作用高效检查字符串是否包含指定 Unicode 字符
性能优于 ContainsAny 和 ContainsFunc,接近手动遍历
使用场景精确匹配单个字符(如符号、汉字、控制字符等)
替代方案多字符匹配用 ContainsAny;复杂逻辑用 ContainsFunc

总结对比表

场景推荐实现方式优势
精确单字符匹配strings.ContainsRune(s, '中')代码直观,官方优化
多字符集合检查strings.IndexAny(s, "abc")减少多次函数调用
高频性能敏感手动 for-range 遍历避免函数调用开销
复杂条件判断strings.ContainsFunc支持自定义逻辑

核心逻辑

ContainsRune极简的API高效的实现 成为单字符检查的首选方案,尤其适合:

  • 需要精确匹配 Unicode 字符的场景
  • 对代码可读性要求较高的项目
  • 早起 Go 版本(1.0 +)的兼容性需求

最终建议

  • 优先使用:当需要检查单个已知字符是否存在时(如 @、\t、中)
  • 避免使用:需要匹配子串或字符集合时
  • 性能临界:在超高频调用(如每秒百万次)中,手动遍历可能有极微小优势

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com