Go语言中的字符rune类型和索引访问、range循环迭代及常用字符串函数列表了解_golang rune遍历-程序员宅基地

技术标签: 常用字符串函数  golang  go  其它后端语言  开发语言  rune  

一、Go语言中的字符rune类型、索引访问、range循环迭代

1. 字符rune类型

    Go语言的字符串是使用UTF-8编码的,UTF-8是Unicode的实现方式之一,因此可以直接在代码中使用中文,而不像python那样别扭。给我们国人开发带来很好的便利。Go语言中的原生字符串需要使用双引号("")或反引号(``)定义。单引号不能用来表示字符串,否则会报错:

invalid character literal (more than one character) cannot use '\u0000' (type rune) as type string in field value。

    在GO语言中双引号:"", 用于单行字符串。如果需要用于多行字符串,需要使用反引号:``,此时反引号中的内部会原样解析。

2. rune类型字符访问

    GO有点像python和lua, GO对字符串的访问也可以支持[]索引式访问,只能访问到字符串中的字符,但不可以修改。如下示例:

#按索引输出字串中的字符
func main() {
	strs := "abcd"
	fmt.Print(strs[0])
	fmt.Println(string(strs[0]))
	fmt.Print(strs[2])
	fmt.Println(string(strs[2]))
}
#输出内容
[C:/Go/GOPATH/src/hello]
97a
99c

    需要注意的是golang的字符称为rune(int32),等价于C中的char,如上例中直接输出strs[0]只会输出字符串的ASCII码整数值,字符串可直接与整数转换,rune实际就是整型,必需先将其转换为string才能打印出来,否则打印出来的是一个整数。如下示例:

#rune示例
func main() {
	var char rune = 'k'
	var value int = 110
	toint := int(char)
	tochar := rune(value)
	fmt.Println(toint)
	fmt.Println(tochar)
	fmt.Println(string(tochar))
}
#输出结果
[C:/Go/GOPATH/src/hello]
107
110
n

    GO语言中使用len()函数计算字符串占用的字节数,utf-8是变长字符集,英文标点占用1个字节,中文占用3个字节。go语言中的字符串实际上是类型为byte的只读切片。或者说一个字符串就是一堆字节。

    这意味着,当我们将字符存储在字符串中时,实际存储的是这个字符的字节。一个字符串包含了任意个byte,它并不限定Unicode,UTF-8或者任何其他预定义的编码。go语言中的源码定义为utf-8文本,没有其他的表示。

3. rune类型字符range循环迭代

    对字符串的遍历提供了一种特殊处理,那就是字符串上使用for…range循环。range循环迭代时,就会解码一个utf-8编码的rune。如下示例:

#字符串的Unicode遍历
func showReflect() {
	tips := "武汉加油!go!"
	fmt.Println(len(tips))
	for _, char := range []rune(tips) {
		fmt.Println(string(char))
	}
}
#打印结果
[C:/Go/GOPATH/src/hello]
18
'武''汉''加''油''!''g''o''!'

二、GO语言中的常用字符串函数列表了解

字符串比较,比较机制是字符的对称比较。
strings.Compare(a, b string) int
0表示a == b ;-1表示a < b ;1表示a > b

检测字符串 substr 是否在 s 中。
strings.Contains(s, substr string) bool

检测字符串chars的中任意字符是否出现在 s 中。
strings.ContainsAny(s, chars string) bool

检测 rune字符是否出现在 s 中。
strings.ContainsRune(s string, r rune) bool

统计字符串s中非重叠substr的数量。若统计空字符串"",会返回 s 的长度加1。
strings.Count(s, substr string) int

检测字符串 s 和 t 在忽略大小写的情况下是否相等。
strings.EqualFold(s, t string) bool

返回使用空格分割的字符串 s,结果为切片。
strings.Fields(s string) []string

使用函数确定分隔符,来分割字符串 s。结果是切片。
strings.FieldsFunc(s string, f func(rune) bool) []string

检测字符串 s 是否以字符串 prefix 作为前缀。
strings.HasPrefix(s, prefix string) bool

检测字符串 s 是否以字符串 suffix 作为后缀。
strings.HasSuffix(s, suffix string) bool

返回字符串 substr 在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。
strings.Index(s, substr string) int

返回字符串 chars 中的任意字符在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。
strings.IndexAny(s, chars string) int

返回byte字符 c 在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。
strings.IndexByte(s string, c byte) int

返回字符串 s 中第一次满足函数 f 的rune字符的索引位置,若没有出现,返回-1。
strings.IndexFunc(s string, f func(rune) bool) int

返回run字符 r 在字符串 s 中第一次出现的索引位置,若没有出现,返回-1。
strings.IndexRune(s string, r rune) int

使用分隔符 sep 连接字符串切片 a。
strings.Join(a []string, sep string) string

返回字符串 substr 在字符串 s 中最后一次出现的索引位置,若没有出现,返回-1。
strings.LastIndex(s, substr string) int

返回字符串 chars 中的任意字符在字符串 s 中最后一次出现的索引位置,若没有出现,返回-1。
strings.LastIndexAny(s, chars string) int

返回byte字符 c 在字符串 s 中最后一次出现的索引位置,若没有出现,返回-1。
strings.LastIndexByte(s string, c byte) int

返回字符串 s 中字后一次满足函数 f 的rune字符的索引位置,若没有出现,返回-1。
strings.LastIndexFunc(s string, f func(rune) bool) int

返回字符串 s 中的每个字符经过映射函数 mapping 处理之后的字符串。
strings.Map(mapping func(rune) rune, s string) string

返回将字符串 s 重复 count 的字符串。
strings.Repeat(s string, count int) string

在字符串 s 中使用字符串 new 替换字符串 old,使用 n 限定替换次数,n设置为负数表示没有限制。返回替换结果。
strings.Replace(s, old, new string, n int) string

使用分隔符 sep 分割字符串 s,返回字符串切片
strings.Split(s, sep string) []string

在分隔符 sep 后分割字符串 s,返回字符串切片
strings.SplitAfter(s, sep string) []string

在分隔符 sep 后分割字符串 s,使用 n 限定分割的元素数量,n<0全部子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。
strings.SplitAfterN(s, sep string, n int) []string

在分隔符 sep 分割字符串 s,使用 n 限定分割的元素数量,n<0全部子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。
strings.SplitN(s, sep string, n int) []string

返回Title化的字符串。
strings.Title(s string) string

转换字符串 s 到小写。
strings.ToLower(s string) string

使用特定的规则转换字符串 s 到小写。
strings.ToLowerSpecial(c unicode.SpecialCase, s string) string

返回全部字符都Title化的字符串。
strings.ToTitle(s string) string

使用特定的规则将全部字符都Title化。
strings.ToTitleSpecial(c unicode.SpecialCase, s string) string

将字符串 s 中所有字符转换为大写。
strings.ToTitleSpecial(unicode.TurkishCase, "dünyanın ilk borsa yapısı Aizonai kabul edilir")

使用特定的规则将字符串 s 中所有字符转换为大写。
strings.ToUpperSpecial(c unicode.SpecialCase, s string) string

截取字符串 s 两端包裹的特定字符集 cutset。
strings.Trim(s string, cutset string) string

截取字符串 s 两端满足函数 f 的字符。
strings.TrimFunc(s string, f func(rune) bool) string

截取字符串 s 左边包裹的特定字符集 cutset。
strings.TrimLeft(s string, cutset string) string

截取字符串 s 左边满足函数 f 的字符。
strings.TrimLeftFunc(s string, f func(rune) bool) string

截取字符串 s 的前缀 prefix。
strings.TrimPrefix(s, prefix string) string

截取字符串 s 右边包裹的特定字符集 cutset。
strings.TrimRight(s string, cutset string) string

截取字符串 s 右边满足函数 f 的字符。
strings.TrimRightFunc(s string, f func(rune) bool) string

截取字符串 s 两端的空白字符。
strings.TrimSpace(s string) string

截取字符串 s 的后缀 suffix。
strings.TrimSuffix(s, suffix string) string

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47792780/article/details/136894593

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签