golang 中获取字符串个数的方法
作者:自然对数 发布时间:2024-02-07 17:20:04
标签:golang,字符串
在 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
0
投稿
猜你喜欢
- 项目地址:https://github.com/chen0495/pythonCrawlerForJSU环境python 3.5即以上req
- 本文实例为大家分享了检测几何图形轮廓和检测花朵图形轮廓,供大家参考,具体内容如下OpenCV绘制图像轮廓绘制轮廓的一般步骤:1、读取图像im
- 本文实例讲述了python中enumerate() 与zip()函数的使用比较。分享给大家供大家参考,具体如下:enumerate() 与z
- 第一个示例: 简单的jsp自定标签获取内容: 首先创建一个jsp实例类然后继承SimpleTagSupport类 然后实现父类的doTag(
- 题目:给定两个自然数,求这两个数的最大公约数。分析:单看题目的话,非常简单,我们可以循环遍历自然数,如果能够整除两个自然数,就把这个数记下来
- 测试配置文件test.conf内容如下:[first]w = 2v: 3c =11-3[second]sw=4test: hello测试配置
- defaultdict 主要用来需要对 value 做初始化的情形。对于字典来说,key 必须是 hashable,immutable,un
- python 2.7.11django 1.8.4错误内容:related Field has invalid lookup: iconta
- 一、Session 的概念cookie 是在浏览器端保存键值对数据,而 session 是在服务器端保存键值对数据 session 的使用依
- 本文以实例形式展示了Python算法中栈(stack)的实现,对于学习数据结构域算法有一定的参考借鉴价值。具体内容如下:1.栈stack通常
- 有这样一个经历,服务器挂掉了,请工程师维护,为了安全,工程师进行核心操作时,直接关掉显示器进行操作,完成后,再打开显示器,进行收尾工作...
- 前言一般js破解有两种方法,一种是用Python重写js逻辑,一种是利用第三方库来调用js内容获取结果。这两种方法各有利弊,第一种方法性能好
- 一、文本文件文本文件,主要包括csv和txt两种等,相应接口为read_csv()和to_csv(),分别用于读写数据1. read_csv
- 去年5月至10月间,我和雅虎口碑网的前端主管:鄢学鹍(秦歌),一起翻译了这本《JavaScript语言精粹》。原书作者是JavaScript
- 本文讲述了python提示No module named images的解决方法,非常实用!分享给大家供大家参考。具体方法如下:出现提示:I
- 如何用ASP获知机器的网络配置?看看我们的例子:Option Explicit Dim WSHShell&nb
- 前言大家好,我是阿光。本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GC
- 现像如下:站点无法打开,或者打开很慢.HTML可以打开.重新启动或者回收应用程序池可恢复.但过一段时间又会出现日志里会有:ISAPI
- python3 cmp实现python3移除了cmp()函数,但提供了六个丰富的比较运算符,详见此处import operator &nbs
- 下面是例子分析表A记录如下: aID aNum