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


猜你喜欢
- 写在前面:前一段时间 kejun 给我们培训JavaScript的时候,在幻灯片上推荐了很多特别经典的文章,其中就有这一篇。读过之后感觉很不
- 单向链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节
- 下面是用Python实现Floyd算法的代码,供大家参考,具体内容如下# -*- coding: utf-8 -*- ""
- 运行环境:IIS脚本语言:VBScript数据库:Access/SQL Server数据库语言:SQL1.概要:不论是在论坛,还是新闻系统,
- 报错:raise MissingSchema(requests.exceptions.MissingSchema: Invalid URL
- 本文详细介绍了array_slice函数的详细用法以及一些常用的array_slice实例程序,分享给大家供大家参考。具体分析如下:arra
- 目标嗯,我们知道搜索或浏览网站时会有很多精美、漂亮的图片。我们下载的时候,得鼠标一个个下载,而且还翻页。那么,有没有一种方法,可以使用非人工
- 一、前言在Python提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法(如,search()、match()、
- Python综合应用——宿舍管理系统,供大家参考,具体内容如下/p>通过对 python 的函数,变量的应用,编写简单的关系系统实现功
- 一 修改root密码的三种办法方法1: 用SET PASSWORD命令首先登录MySQL。格式:mysql> set password
- 1、Windows上anaconda安装配置mmdetection环境稍后再写2、将anaconda环境离线移植到另一台电脑首先将anaco
- Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多进程和进程池是其强大的功能之一,可以让我们更加
- 在Windows中安装MySQL时,有3种MySQL 5.1安装软件包可供选择:· 基本安装:该安装软件包的文件名类似
- 简介使用百度深度学习框架paddlepaddle对人像图片进行自动化抠图安装根据PaddlePaddle官网命令安装如pip install
- 个人理解:动态路由不同于常见的静态路由,可以根据不同的「因素」而改变站点路由列表。常见的动态路由大都是用来实现:多用户权限系统不同用户展示不
- CNN可以同时进行多通道的输入,例如一张彩色图片可以分解成RGB三个通道输入给CNN,当使用自己的数据集时,可以通过numpy来实现数据的多
- 其实我这样做的本意是为了防止盗链!大家帮忙看一下通过代码能够根治盗链!只要不是HTTP_REFERER来源于(google.com goog
- 本文实例为大家分享了vue简单的图书管理具体代码,供大家参考,具体内容如下<table class="table table
- 1、使用mysqldump工具将MySql数据库备份mysqldump -u root -p -c --default-character-
- 主流的web server 一个巴掌就能数出来,apache,lighttpd,nginx,iisapplication,中文名叫做应用服务