
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 中获取字符串个数的方法,希望对大家有所帮助,如果大家有任何
疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
相关推荐
-
Golang 统计字符串字数的方法示例
比如新浪微博发微博的输入框有一个已输入字数的统计,它的规则推测是:汉字和中文标点算 1 个字数,英文和其他符号算 0.5 个字数.不足 1 个字算 1 个.大家可以去微博体验一下计算方式. golang 可以使用正则和 unicode 包的方法判断. 以下函数 GetStrLength 返回输入的字符串的字数,每个汉字和中文标点算 1 个字数,英文和其他字符算半个字数,不足 1 个字算 1 个. // GetStrLength 返回输入的字符串的字数,汉字和中文标点算 1 个字数,英文和其他字符
-
Golang 中整数转字符串的方法
整形转字符串经常会用到,本文讨论一下 Golang 提供的这几种方法.基于 go1.10.1 fmt.Sprintf fmt 包应该是最常见的了,从刚开始学习 Golang 就接触到了,写 'hello, world' 就得用它.它还支持格式化变量转为字符串. func Sprintf(format string, a ...interface{}) string Sprintf formats according to a format specifier and returns the re
-
Golang中文字符串截取函数实现原理
在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码. 例如: 想要截取前四个字 name := "我是胡八一" fmt.Println("name[:4] = ",name[:4]) 执行后得到的结果会是这样的: name[:4] = 我? 解决方法: 先将其转为[]rune,再截取后,转会string na
-
Golang使用zlib压缩和解压缩字符串
在python的时候就习惯使用zlib进行网页压缩. golang下同样使用zlib进行压缩解压缩. zlib官方给出的方法很简单,这里权当一个补充. zlib.NewWriter() 只能传递 []byte类型数据. NewWriterLevel 可以传递压缩的等级. package main import ( "bytes" "compress/zlib" "fmt" "io" ) func main() { var
-
Golang实现字符串倒序的几种解决方案
前言 本文主要给大家介绍了关于Golang实现字符串倒序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 字符串倒置如下: Hello World --> dlroW olleH 解决方案1: length := len(str) array := make([]string , length) for i , v := range str{ array[i] = string(v) } for i := 0 ; i < length/2 ; i++ { array[
-
Golang字符串的拼接方法汇总
字符串拼接在 golang 里面其实有很多种实现. 实现方式 直接使用运算符 func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i := 0; i < b.N; i++ { _ = hello + "," + world } } golang里面的字符串都是不可变的
-
golang实现unicode转换为字符串string的方法
本文实例讲述了golang实现unicode转换为字符串string的方法.分享给大家供大家参考,具体如下: 复制代码 代码如下: package main import ( "bytes" "encoding/binary" "encoding/hex" "fmt" "strings" ) func main() { str := `\u5bb6\u65cf
-
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
-
java实现统计字符串中字符及子字符串个数的方法示例
本文实例讲述了java实现统计字符串中字符及子字符串个数的方法.分享给大家供大家参考,具体如下: 这里用java实现统计字符串中的字符(包括数字.大写字母.小写字母以及其他字符)个数,以及字符串的子字符串的个数. 运行效果图如下: 具体代码如下: import java.util.Scanner; public class Counter { static Scanner scanner = new Scanner(System.in); public static void count(Str
-
Golang中map数据类型的使用方法
目录 前言 案例 map map定义 map声明 map的操作 总结 前言 今天咱们来学习一下golang中的map数据类型,单纯的总结一下基本语法和使用场景,也不具体深入底层.map类型是什么呢?做过PHP的,对于数组这种数据类型是一点也不陌生了.PHP中的数组分为索引数组和关联数组.例如下面的代码: // 索引数组[数组的key是一个数字, 从0,1,2开始递增] $array = [1, '张三', 12]; // 关联数组[数组的key是一个字符串,可以自定义key的名称] $array
-
在JSP页面中获取当前日期时间的方法
1. <SCRIPT LANGUAGE="JavaScript"> var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,
-
Java 中运行字符串表达式的方法
在日常的开发中,偶尔会遇到运行字符串表达式的情况,通常这样的需求会对需求进行进一步分析,然后进行进一步 "特殊化",最后直接写到硬代码中,这样做的话,就不太好扩展了:也有另外的处理方式是采用 Java 内置的 JavaScript 引擎等运行字符串表达式,但是内置引擎也有弊端,比如频繁运行片段式的字符串的效率非常低,并且与 Java 之间的数据交互比较麻烦,于是,便产生了写一个"字符串表达式计算引擎"的想法... 写的过程其实没想象中那么麻烦,最初版大概在今年 5
-
python实现n个数中选出m个数的方法
题目: 某页纸上有一个数列A,A包含了按照从小到大的顺序排列的多个自然数,但是因为一些原因,其中有M个连续的位置看不清了.这M个数左边最小的数是X,右边最大的数是Y,这些数之和大于等于P且小于等于Q. #请写程序,在输入M,X,Y,P,Q后自动给出所有可能的合法排列 from itertools import combinations ####第一步,题目给的数据输入 str=input() m=int(str.split()[0]) x=int(str.split()[1]) y=int(st
-
python 获取字符串MD5值方法
工作中用到了MD5值来进行对文件校验,MD5本身就是一个很出色的算法,一定程度上解决了hash散列的冲突,关于MD5的内容网上也有很多,这里只要是进行一个实验,验证一下文件校验方面的工作,因为习惯使用了python来完成这样的任务,这里也是使用python,了解到python本身自带有hashlib模块,该模块中就包含了所需的MD5方法,当然python也有专门的MD5模块可以使用,使用得当发的大同小异,但是个人觉得hashlib模块更好用一些,今天就使用python的os.commands还有
-
C语言多种获取字符串长度的方法
在C语言中,想要获取字符串长度可以有很多方法,下面分别介绍 一.使用sizeof()运算符 在C语言中,sizeof() 是长度的运算符,括号中可以放入数据类型或者表达式,一般我们用来计算字符串长度. 基本用法: int i=10; sizeof(i);//表达式 char str[]="hello world"; sizeof(str); sizeof(double);//数据类型 在使用sizeof()求字符串长度时,会将 '\0' 也计算到字符串长度中.例如"abcd&
-
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
本文实例讲述了JavaScript使用encodeURI()和decodeURI()获取字符串值的方法.分享给大家供大家参考.具体如下: JavaScript使用encodeURI()和decodeURI()获取字符串值,不能就是地址栏显示的字串,以前经常在网上见到有人问此问题,无意在网上发现,不知是不是您想要的,先看看效果吧. 先来看看运行效果: 具体代码如下: <html> <head> <meta http-equiv="Content-Type"
-
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
本文实例讲述了PHP使用mysql_fetch_object从查询结果中获取对象集的方法.分享给大家供大家参考.具体分析如下: mysql_fetch_object函数用于,提取结果行从一个MySQL的结果集作为objectiative数组. mysql_fetch_object语法: array mysql_fetch_object (resource $Result_Set) Result_Set句柄返回一个mysql_query查询结果集. 如果执行成功返回包含了所有数据行的object,
随机推荐
- MooBox 基于Mootools的对话框插件
- XP系统自动修复命令(sfc)详解
- Java 并发编程:volatile的使用及其原理解析
- IOS 开发UITextView回收或关闭键盘
- oracle 存储过程加密的方法
- Python实现的一个找零钱的小程序代码分享
- 详细解读PHP的Yii框架中登陆功能的实现
- div总是被select遮挡的解决方法
- mssql注入躲避IDS的方法
- 基于jQuery实现表格的排序
- jquery中实现标签切换效果的代码
- 用jquery获取自定义的标签属性的值简单实例
- Android实战教程第五篇之一键锁屏应用
- 浅析stl序列容器(map和set)的仿函数排序
- php include和require的区别深入解析
- 基于mysql的bbs设计(五)
- Android 中CheckBox多项选择当前的position信息提交的示例代码
- Android中WebView的基本配置与填坑记录大全
- spring boot jar的启动原理解析
- 深入理解与使用keep-alive(配合router-view缓存整个路由页面)
其他
- android recyclerview图片添加
- js实现点击按钮后给Div图层设置随机背景颜色的方法
- 如何更换docker的网桥模式为仅主机模式
- opencv提取LBP纹理 python
- vue 根据类型判断 显示表单
- js console.log 打印 对象地址
- vue监听sessionstorage某字段的变化
- python中concat用法
- echarts 桑葚图修改颜色
- electron打包vue项目
- mysql中varchar比较大小
- 免费的sql server
- vue编辑后不能刷新列表
- php exec 注入
- JavaScript一次可以声明多个数组吗
- Ant Design Vue 日期选择器默认显示当前时间
- element-ui有没有可以拖动排序的组件
- springboot 404接口 不走拦截器
- android 多个动态加载view
- 给img动态添加src路径,设置随机位置