Go中的字符串

390 阅读2分钟

这是我参与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"))