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,字符串
0
投稿

猜你喜欢

  • Vue3 全局实例上挂载属性方法案例讲解

    2023-07-02 16:46:14
  • Python map和reduce函数用法示例

    2022-06-21 09:02:25
  • MySQL如何让一个表中可以有多个自增列

    2024-01-15 03:41:07
  • C#实现MySQL命令行备份和恢复

    2024-01-21 02:19:48
  • 基于FME使用Python过程图解

    2023-12-17 07:57:37
  • python查看模块,对象的函数方法

    2021-07-11 19:45:10
  • Python爬虫通过替换http request header来欺骗浏览器实现登录功能

    2021-04-05 21:55:26
  • 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
  • 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
  • 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
  • asp之家 网络编程 m.aspxhome.com