golang 中获取字符串个数的方法
在golang中不能直接用len函数来统计字符串长度,查看了下源码发现字符串是以UTF-8为格式存储的,说明len函数是取得包含byte的个数
//stringisthesetofallstringsof8-bitbytes,conventionallybutnot //necessarilyrepresentingUTF-8-encodedtext.Astringmaybeempty,but //notnil.Valuesofstringtypeareimmutable.
举个例子,”Hello,世界“(因为,对比所以用了中文)
s:="Hello,世界" fmt.Println(len(s))//13 fmt.Println([]byte(s))//[721011081081114432228184150231149140]
既然是以byte存储的,那自然就想到了取byte的长度
-bytes.Count() -strings.Count() -将字符串转换为[]runee后调用len函数 -使用utf8.RuneCountInString()
packagemain import( "bytes" "fmt" "strings" "testing" "unicode/utf8" ) /* 在golang中不能直接用len函数来统计字符串长度,查看了下源码发现字符串是以UTF-8为格式存储的,说明len函数是取得包含byte的个数 */ funcmain(){ s:="hello,世界" fmt.Println(len(s))//13 fmt.Println([]byte(s))//[721011081081114432228184150231149140] fmt.Print(f1(s)) } funcf1(sstring)int{ returnbytes.Count([]byte(s),nil)-1 } funcf2(sstring)int{ returnstrings.Count(s,"")-1 } funcf3(sstring)int{ returnlen([]rune(s)) } funcf4(sstring)int{ returnutf8.RuneCountInString(s) } vars="Hello,世界" funcBenchmark1(b*testing.B){ fori:=0;i在golangldea配置中我没有看到benchamark配置,总说包不对,在命令行中输入
goteststringCount_test.go-bench".*"
得到以下结果
Benchmark1-12 100000000 17.7ns/op
Benchmark2-12 100000000 14.0ns/op
Benchmark3-12 100000000 14.5ns/op
Benchmark4-12 100000000 13.1ns/op最快的是utf8.RuneCountInString()
总结
以上所述是小编给大家介绍的golang中获取字符串个数的方法,希望对大家有所帮助,如果大家有任何
疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!