这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战
字符串表示方法
双引号字符串
字符串中的转义字符将会被转义, 转义后输出
// 双引号字符串
/*
输出结果
Hello
world!
*/
str := "Hello \n world!"
fmt.Println(str)
反引号字符串
字符串中的转义字符不会被转义, 原样输出
// 反引号字符串
/*
输出结果
Hello \n World!
*/
str = `Hello \n World!`
fmt.Println(str)
空字符串用""来表示, 也就是字符串的零值
字符串的长度
我们可以使用len()这个函数来获取字符串字节的长度
需要注意的是这个函数获取的是字符串中所有字符长度的总和, 而不是字符的数量
/*
纯字母, 来获取字节长度
输出结果: 15
*/
str = `Hello \n World!`
fmt.Println(len(str))
/*
中文字母, 来获取字节长度
输出结果: 8
*/
str = "你好Go"
fmt.Println(len(str))
通过utf8.RuneCountInString()来获取字符串中字符的个数, 而不是字节数
/*
中文字母, 获取字节长度
输出结果: 8
*/
str = "你好Go"
fmt.Println(len(str))
/*
中文字母, 获取字符长度
输出结果: 4
*/
fmt.Println(utf8.RuneCountInString(str))
遍历字符串
// Go语言中的for..range在处理字符串的时候, 做了隐式类型的解码
// 遍历带中文的字符串
str = "你好Go"
for i, v := range str {
fmt.Printf("索引: %d, 值: %c \n", i, v)
}
// 遍历纯字母的字符串
str = `Hello World!`
for i, v := range str {
fmt.Printf("索引: %d, 值: %c \n", i, v)
}
字符串的拼接
重载运算符 +, +=
// 字符串的直接拼接
str = "Hello " + "world!"
str += " I am a gopher"
fmt.Println(str)
strings.Join()
// 在拼接多个字符串时, 加入某个字符串, 以分割
str = strings.Join([] string{"Hello", "world"}, " and ")
fmt.Println(str)
bytes.Buffer
// bytes.Buffer拼接字符串
var buffer bytes.Buffer
buffer.WriteString("Hello")
buffer.WriteString(" world!")
fmt.Println(buffer.String())
strings.Builder
// strings.Builder拼接字符串
var builder strings.Builder
builder.WriteString("I")
builder.WriteString(" am")
builder.WriteString(" a")
builder.WriteString(" gopher!")
fmt.Println(builder.String())
前两种拼接字符串的方法会有一些内存和性能上的浪费, 建议可以使用后面两种进行字符串的拼接
字符串常用操作
判断前缀
// 前缀
res := strings.HasPrefix("isOpen", "is")
fmt.Println(res)
判断后缀
// 后缀
res = strings.HasSuffix("finished", "ed")
fmt.Println(res)
分割字符串
res2 := strings.Split("Hi!Shaosiming!You are nice!", "!")
for _, v := range res2 {
fmt.Println(v)
}
返回子串索引
// 从左开始第一次出现的位置
index := strings.Index("Hi shaosiming", "i")
fmt.Println(index)
// 从右开始第一次出现的位置
index = strings.LastIndex("Hi shaosiming", "i")
fmt.Println(index)
字符串替换
第一个参数为要操作的字符串
第二个参数为将要被替换的字符串
第三个参数为将要替换成的字符串
第四个参数为被替换次数, -1代表全部替换
str = strings.Replace("Hi!Shaosiming!You are nice!", "!", ",", -1)
fmt.Println(str)
字符串转大写 字符串转小写
// 转大写
fmt.Println(strings.ToUpper("Hi Shaosiming"))
// 转小写
fmt.Println(strings.ToLower("Hi Shaosiming"))
字符串中字符出现的次数
fmt.Println(strings.Count("hi shaosiming", "i"))
字符串的包含关系
fmt.Println(strings.Contains("hi shaosiming", "ming"))