在Go语言中, 当我们尝试遍历一个字符串的时候
1 | package main |
执行结果:
1 | 我是带😈emoji的字符串! |
每个i
对应的都是一个字节, 结果中出现的0 3 6 9
是对应了获取底层字节的索引码, 第二个字符的字节码之所以会从第3位开始取, 是因为第一个中文字符其实占用了三个字节, 所以下一个字需要从索引为3的字节开始读取
Go语言中, 有一种数据类型叫rune
, 他是由一个int32
类型构成的新的数据类型, 专门用来处理Go语言中的字符问题
下面的demo中, 我们使用强制类型转换来将字符串, 强制转换为rune类型
1 | package main |
执行结果:
1 | 我是带😈emoji的字符串! |
小结:
- rune相当于Go语言中的char
- 使用range遍历position, rune
- 使用utf8.RuneCountInString来获得字符的长度
- 使用len(s)来获得字节的长度, len([]rune(s))来获得字符的长度
- 使用[]byte获得字节
使用strings包操作字符串
一下列出常用的函数, 更多使用方法和demo请参考官方文档: https://golang.org/pkg/strings/
Compare
func Compare(a, b string) int
Compare函数用来比较两个字符串, 返回值为int类型, 如果两个字符串相等, 返回0
; 如果a>b
返回1
; a<b
返回-1
1 | package main |
执行结果:
1 | -1 |
Contains
func Contains(s, substr string) bool
Contains函数用来判断第二个参数的字符串是否是第一个参数字符串的子串, 返回值为bool类型
1 | package main |
执行结果:
1 | true |
Count
func Count(s, substr string) int
Count函数用来计算子串在s字符串中出现的次数
Fields
func Fields(s string) []string
Fields函数以空格为分隔符, 将字符串分割成slice
1 | package main |
执行结果:
1 | Fields are: ["foo" "bar" "baz"] |
Index
func Index(s, substr string) int
Index函数返回第一个substr在s中出现的位置, 如果没有找到, 将返回-1
1 | package main |
执行结果:
1 | 4 |
Join
func Join(a []string, sep string) string
Join函数用来将slice以指定的字符拼接成字符串
1 | package main |
执行结果:
1 | foo, bar, baz |
LastIndex
func LastIndex(s, substr string) int
LastIndex函数用来查找在s中最后一次出现子串的位置
1 | package main |
执行结果:
1 | 0 |
Repeat
func Repeat(s string, count int) string
Repeat函数返回以指定次数重复的字符(串)
1 | package main |
执行结果:
1 | banana |
Replace
func Replace(s, old, new string, n int) string
替换
Split
func Split(s, sep string) []string
将字符串以指定字符切割成slice
Title
func Title(s string) string
每个单词的首字符大写
ToLower
func ToLower(s string) string
转小写
ToUpper
func ToUpper(s string) string
转大写
Trim/TrimLeft/TrimRight
func Trim(s string, cutset string) string
去掉两边空格/去掉左边空格/去掉右边空格