Go语言中的字符串处理方法示例详解

2020-01-28 13:41:04于丽

1 概述

字符串,string,一串固定长度的字符连接起来的字符集合。Go语言的字符串是使用UTF-8编码的。UTF-8是Unicode的实现方式之一。

Go语言原生支持字符串。使用双引号("")或反引号(``)定义。

双引号:"", 用于单行字符串。

反引号:``,用于定义多行字符串,内部会原样解析。

示例:

// 单行
"心有猛虎,细嗅蔷薇"
// 多行
`
大风歌
大风起兮云飞扬。
威加海内兮归故乡。
安得猛士兮守四方!
`

字符串支持转义字符,列表如下:

r 回车符(返回行首) n 换行符(直接跳到下一行的同列位置) t 制表符 ' 单引号 " 双引号 反斜杠 uXXXX Unicode字符码值转义,例如 "u5eb7" 就是 "康"

Go语言中字符串的顶层结构是由一个指针和长度构成的。使用 unsafe.Sizeof("") 会得到16长度,其中8个字节是指针,指向字符串的内存地址,8个是存储字符串的长度。

2 常规操作

以下是针对字符串的操作总结,主要来自于Go语言的API的说明和测试。

[]索引访问

可以使用[index]方式,访问到字符串中的字符。可以访问,不可以修改。

s := "Hank"
fmt.Printf("%c", s[2])
// 返回 n

unicode/utf8 包

多字节字符的处理,请参考 unicode/utf8 包的相关说明。

例如:


import "unicode/utf8"
utf8.RuneCountInString("小韩说课")
// 返回 4

len(),字符串占用的字节数

utf-8 是变长字符集,英文标点占用1个字节,中文占用3个字节。

len("Hank康")
// 返回 7

+,字符串连接"

"Hello" + " " + "Hank"

==, >, <

字符串比较,比较机制是字符的对称比较。


"abc" > "bbcd"
// 结果为false

strings.Compare(a, b string) int

字符串比较,比较机制是字符的对称比较。返回值为:

0,表示a == b
-1,表示a < b
1,表示a > b
strings.Compare("abc", "abcd")
// 返回 1

strings.Contains(s, substr string) bool

检测字符串 substr 是否在 s 中。


strings.Contains("foobar", "foo")
// 返回 true
strings.Contains("fobar", "foo")
// 返回 false

strings.ContainsAny(s, chars string) bool

检测字符串 chars 的中任意字符是否出现在 s 中。


fmt.Println(strings.ContainsAny("Hank", "kang")) 
// 返回 true
fmt.Println(strings.ContainsAny("Hank", "go")) 
// 返回 false

strings.ContainsRune(s string, r rune) bool