1、字符串截取介绍
  • 可以使用len(字符串变量)获取字符串的字节长度,其中英文占1个字节长度中文占3个字节长度。(这是因为在Golang中string类型的底层是通过byte数组实现的,在unicode编码中,中文字符占两个字节,而在utf-8编码中,中文字符占三个字节而Golang的默认编码正是utf-8。)举例如下:

  • 可以使用变量名[n]获取字符串的第n+1个字节,返回这个字节对应的Unicode码值(uint8类型),注意n的取值范围是[0,字符串长度)。

我们知道一个中文字符占3个字节,以上为例,s为字符串"smallming张"且字符张占据字符串第9位到第11位,如果我们想打印出字符“张”,无论s[9]、s[10]还是s[11]都不能得到完整的字符”张“的。我们必须同时获取9-11才能得到完整的字符”张“。于是有:

  • 可以通过使用变量名[n:m]取出大于等于n小于m的字符序列。其中n和m都是可以省略的,但省略后默认n为0,m为字符串字节长度减1;因为一个中文字符占3个字节,如果不把中一个文字符完全取出会出现乱码。

在上面的例子中我们知道这个字符串的内容是什么所以很容易获取里面的任意内容,但是如果我们不知道一个字符串的内容是什么时,可以通过下面方法获取其内容。

  • 可以通过把字符串转换为切片获取长度并获得里面的内容。还可以直接使用for循环结合range获取。

如果想要获得真实的字符串长度而不是其所占用字节数,有两种方法实现:

方法一:使用unicode/utf-8包中的RuneCountInString方法

str := "hello 世界"
fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))

方法二:将字符串转换为rune类型的数组再计算长度

str := "hello 世界"
fmt.Println("rune:", len([]rune(str)))

2、字符串中其他的常用函数

s := "SmaLLming张"
//strings.Index(s, "m")查找字符“m”在字符串s中第一次出现的位置
fmt.Println(strings.Index(s, "m"))//输出1
//strings.LastIndex(s, "m")查找字符"m"在字符串s中最后一次出现的位置
fmt.Println(strings.LastIndex(s, "m"))//输出5
//strings.HasPrefix(s, "small")判断字符串s是否以指定字符串“small”开头
fmt.Println(strings.HasPrefix(s, "small"))//输出true
//strings.HasSuffix(s, "张")判断字符串s是否以指定字符串“张结尾”
fmt.Println(strings.HasSuffix(s, "张"))//输出true
//strings.Contains(s, "110")判断字符串s是否包含指定字符串“110”
fmt.Println(strings.Contains(s, "110"))//输出false
//strings.ToLower(s)将字符串s全部变小写
fmt.Println(strings.ToLower(s))//输出smallming张
//strings.ToUpper(s)将字符串s全变大写
fmt.Println(strings.ToUpper(s))//输出SMALLMING张
//strings.Replace(s, "m", "X",1)将字符串s中n的字符"m"替换成"X",当n小于0时表示全部替换
fmt.Println(strings.Replace(s, "m", "X",-1))//输出SXaLLXing张
//strings.Repeat(s, 2)把字符串s复制count遍
fmt.Println(strings.Repeat(s, 2))//输出SmaLLming张SmaLLming张
//strings.Trim(s, "S")去掉字符串前后指定的字符(前后只要有不管有几个就都去掉
fmt.Println(strings.Trim(s, "S"))
//当去掉空格时可以用strings.TrimSpace(s)代替
fmt.Println(strings.TrimSpace(s))
//strings.Split(s, "m")将s从指定字符"m"处切开,切片不再包括"m"
fmt.Println(strings.Split(s, "m"))//[S aLL ing张]
fmt.Printf("%T\n", strings.Split(s, "m"))//[]string字符串切片类型
//strings.Join(x, "")用指定分隔符将切片内容合并成字符串
x := []string{"a", "b", "c"}
fmt.Printf(strings.Join(x, ""))//输出abc