1 字符串
1.1 多行字符串声明
Go把字符串定义为一个多行的字符串,使用 ``
s1 := `hello
world
LOL`
fmt.Println(s1)
/*
打印结果为:
hello
world
LOL
*/
1.2 转义字符
Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等
转义符 | 意义 |
---|---|
\r | 回车符(返回行首) |
\n | 换行符(直接跳到下一行的同列位置) |
\t | 制表符 |
’ | 单引号 |
" | 双引号 |
\ | 反斜杠 |
fmt.Println("hello\"world!")
// 输出结果:hello"world!
2 字符串操作
常见字符串的操作有:
2.1 字符串求长度
字符串中所有字符都是单字节字符时,使用len
函数获取字符串的长度
s := "hello world,世界"
fmt.Println(len(s)) //18
fmt.Println(utf8.RuneCountInString(s)) //14
len()
函数的返回值的类型为 int,表示字符串的 ASCII 字符个数或字节长度。由于“世界”
的字符个数应该是2,上下的差异是由于 Go 语言的字符串都以 UTF-8 格式保存,每个中文占用 3 个字节,因此使用 len() 获得两个中文文字对应的 6 个字节。
如果希望按习惯上的字符个数来计算,就需要使用 Go 语言中 UTF-8 包提供的 RuneCountInString() 函数,统计 Uncode 字符数量。
2.2 求子串操作
2.2.1 Contains关键字
// 子串substr在s中,返回true
func Contains(s, substr string) bool
// chars中任何一个Unicode代码点在s中,返回true
func ContainsAny(s, chars string) bool
// Unicode代码点r在s中,返回true
func ContainsRune(s string, r rune) bool //rune?
Go中的字符有两种类型:uint
以及rune
1.uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
2.rune类型,代表一个 UTF-8字符。
当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。
Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。
2.3 查找主串中字符或者子串位置
查找首次出现位置的函数:
//返回子串sep在字符串s中第一次出现的索引值,不在的话返回-1.
func Index(s, sep string) int
//chars中任何一个Unicode代码点在s中首次出现的位置,不存在返回-1
func IndexAny(s, chars string) int
//查找字符 c 在 s 中第一次出现的位置,其中 c 满足 f(c) 返回 true
func IndexFunc(s string, f func(rune) bool) int //rune类型是int32别名,UTF-8字符格式编码。
//返回字符c在s中第一次出现的位置
func