golang 中获取字符串个数的方法
作者:自然对数 时间:2024-02-07 17:20:04
在 golang 中不能直接用 len 函数来统计字符串长度,查看了下源码发现字符串是以 UTF-8 为格式存储的,说明 len 函数是取得包含 byte 的个数
// string is the set of all strings of 8-bit bytes, conventionally but not
// necessarily representing UTF-8-encoded text. A string may be empty, but
// not nil. Values of string type are immutable.
举个例子,”Hello, 世界“(因为,对比所以用了中文)
s := "Hello, 世界"
fmt.Println(len(s)) // 13
fmt.Println([]byte(s)) // [72 101 108 108 111 44 32 228 184 150 231 149 140]
既然是以 byte 存储的,那自然就想到了取 byte 的长度
- bytes.Count()
- strings.Count()
- 将字符串转换为 []runee 后调用 len 函数
- 使用 utf8.RuneCountInString()
package main
import (
"bytes"
"fmt"
"strings"
"testing"
"unicode/utf8"
)
/*
在 golang 中不能直接用 len 函数来统计字符串长度,查看了下源码发现字符串是以 UTF-8 为格式存储的,说明 len 函数是取得包含 byte 的个数
*/
func main() {
s := "hello, 世界"
fmt.Println(len(s)) // 13
fmt.Println([]byte(s)) // [72 101 108 108 111 44 32 228 184 150 231 149 140]
fmt.Print(f1(s))
}
func f1(s string) int {
return bytes.Count([]byte(s), nil) - 1
}
func f2(s string) int {
return strings.Count(s, "") - 1
}
func f3(s string) int {
return len([]rune(s))
}
func f4(s string) int {
return utf8.RuneCountInString(s)
}
var s = "Hello, 世界"
func Benchmark1(b *testing.B) {
for i := 0; i < b.N; i++ {
f1(s)
}
}
func Benchmark2(b *testing.B) {
for i := 0; i < b.N; i++ {
f2(s)
}
}
func Benchmark3(b *testing.B) {
for i := 0; i < b.N; i++ {
f3(s)
}
}
func Benchmark4(b *testing.B) {
for i := 0; i < b.N; i++ {
f4(s)
}
}
在 golang ldea配置中我没有看到 benchamark配置,总说包不对,在命令行中输入
go test stringCount_test.go -bench ".*"
得到以下结果
Benchmark1-12 100000000 17.7 ns/op
Benchmark2-12 100000000 14.0 ns/op
Benchmark3-12 100000000 14.5 ns/op
Benchmark4-12 100000000 13.1 ns/op
最快的是utf8.RuneCountInString()
总结
以上所述是小编给大家介绍的golang 中获取字符串个数的方法,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/zrds/p/11356334.html
标签:golang,字符串
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Vue3 全局实例上挂载属性方法案例讲解
2023-07-02 16:46:14
![](https://img.aspxhome.com/file/2023/4/139784_0s.png)
Python map和reduce函数用法示例
2022-06-21 09:02:25
MySQL如何让一个表中可以有多个自增列
2024-01-15 03:41:07
![](https://img.aspxhome.com/file/2023/1/114971_0s.png)
C#实现MySQL命令行备份和恢复
2024-01-21 02:19:48
基于FME使用Python过程图解
2023-12-17 07:57:37
![](https://img.aspxhome.com/file/2023/6/120876_0s.png)
python查看模块,对象的函数方法
2021-07-11 19:45:10
![](https://img.aspxhome.com/file/2023/2/84982_0s.jpg)
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2021-04-05 21:55:26
![](https://img.aspxhome.com/file/2023/9/102939_0s.png)
VueJs监听window.resize方法示例
2024-04-29 13:09:41
php中关于普通表单多文件上传的处理方法
2023-11-14 20:21:21
在Django中进行用户注册和邮箱验证的方法
2022-02-01 16:18:35
Python 不设计 do-while 循环结构的理由
2021-08-04 11:55:19
![](https://img.aspxhome.com/file/2023/9/68299_0s.jpg)
Golang解析JSON遇到的坑及解决方法
2024-05-10 13:58:29
关于mysql基础知识的介绍
2024-01-18 10:57:28
Python实现Harbor私有镜像仓库垃圾自动化清理详情
2021-02-08 17:09:46
使用Python编写Linux系统守护进程实例
2022-06-09 16:50:52
关于django连接mysql数据库并进行数据库的创建的问题
2024-01-22 04:50:12
![](https://img.aspxhome.com/file/2023/4/110334_0s.png)
Mongoose经常返回e11000 error的原因分析
2024-05-03 15:36:05
柳永法:vbs或asp采集文章时网页编码问题
2009-02-04 10:50:00
SQL Server 2008中有关XML的新功能
2008-06-04 12:57:00
Python读取键盘输入的2种方法
2023-03-14 22:08:37