Go语言操作字符串
1、截取字符串
Go语言中字符串的本质是数组,是一种值类型且值不可变。可以使用len()函数获取字符串的字节长度,使用切片截取字符串。
var s = "Go is an efficient, interesting, and easy to learn and use language." len1 := len(s) s1 := s[0:7] // s1 = Go is a, length = 68 fmt.Printf("s1 = %s, length = %d\n", s1, len1)
对于中文字符串,由于一个中文不只由一个字节组成,所以直接使用切片可能会将中文的编码截断,结果就是最后一个字乱码。故针对中文字符串的截取,可以先将中文字符串转换为[]rune类型再截取,最后再将[]rune类型通过string()函数转换为字符串类型。
var str = "go是一门高效、有趣且易学易用的语言。" len2 := len(str) s2 := str[0:7] // s2 = go是��, length = 53 fmt.Printf("s2 = %s, length = %d\n", s2, len2) r := []rune(str) s3 := string(r[0:7]) // s3 = go是一门高效 fmt.Printf("s3 = %s\n", s3)
如果要获取中文字符串的字符串长度,可采用如下的方式:
var str = "go是一门高效、有趣且易学易用的语言。" len3 := utf8.RuneCountInString(str) // 19 fmt.Println(len3)
2、字符串反转
将字符串先转换为[]rune类型,利用平行赋值的方式反转,再将[]rune类型转换为字符串类型。
import "fmt" func main() { s := "123456789" res := reverseString(s) // 987654321 fmt.Println(res) s1 := "Go语言非常有趣" res1 := reverseString(s1) // 趣有常非言语oG fmt.Println(res1) } func reverseString(s string) string { r := []rune(s) l := len(r) for i := 0; i < l/2; i++ { r[i], r[l-i-1] = r[l-i-1], r[i] } return string(r) }
3、多个分隔符分割字符串
Go语言内置包strings提供了一个FieldsFunc()函数用于用指定函数分割字符串。
func main() { fn := func(c rune) bool { return strings.ContainsRune("/;", c) } str := "Go;Python;C/C++;Java" res := strings.FieldsFunc(str, fn) fmt.Println(res) } // [Go Python C C++ Java]
4、Go语言内置包strings
Go语言内置包strings提供了很多字符串操作的相关函数。可在命令行执行go doc strings或参阅官网文档:https://pkg.go.dev/strings