概述
字符串是一个非常常用的基础类型,strings
包提供了丰富的函数来操作 string
类型的变量。这些函数的调用方式大多相似,通常通过传入一个字符串作为参数,在该字符串上进行相应的处理。这些函数主要可以分为以下几类:
- 字符串搜索与匹配
- 字符串拆分
- 字符串修改
- 其他实用函数
字符串搜索与匹配
strings.Contains
可以检测字符串是否包含某个子串;strings.ContainsRune
可以检测字符串是否包含某个字符;strings.ContainsAny
可以检测字符串是否包含字符集中的任意一个字符。详细函数声明如下:
func Contains(s, substr string) bool
func ContainsRune(s string, r rune) bool
func ContainsAny(s, chars string) bool
除了简单的判断字符串是否包含子串外,还可以使用 strings.Index
在字符串中搜索某个子串,并获取子串的起始索引位置。如果子串不存在,则返回 -1。函数声明如下:
func Index(s, substr string) int
对于字节、字符、字符集合的搜索,也可以使用以下函数:
func IndexByte(s string, c byte) int // 字节搜索
func IndexRune(s string, r rune) int // 字符搜索
func IndexAny(s, chars string) int // 字符集合搜索,匹配 chars 中的任意一个字符
这些搜索函数都返回第一个匹配的索引位置。此外,strings
包还提供了一系列函数来获取最后一个匹配项的索引下标,对应于每个 Index
函数都有一个 LastIndex
函数。例如 Index
返回第一个匹配子串的起始索引,LastIndex
则返回最后一个匹配子串的起始索引。详细函数声明如下:
func LastIndex(s, substr string) int
func LastIndexByte(s string, c byte) int
func LastIndexAny(s, chars string) int
字符串拆分
字符串拆分是字符串操作中非常常见的一类操作。strings
包支持两种拆分操作:Split
和 SplitAfter
。两者的区别在于 Split
拆分后的结果中不包含分隔符;而 SplitAfter
则保留分隔符。例如 strings.Split("a,b,c", ",")
的结果是 ["a", "b", "c"]
;而 strings.SplitAfter("a,b,c", ",")
的结果是 ["a,", "b,", "c"]
。函数声明如下:
func Split(s, sep string) []string
func SplitAfter(s, sep string) []string
如果希望使用一类字符作为分隔符,strings
包提供了 FieldsFunc
函数,通过传递一个自定义函数来确定某个字符是否为分隔符。下面是一个示例,其中所有非数字和非字母的字符都被视为分隔符:
package main
import (
"fmt"
"strings"
"unicode"
)
func main() {
str := " hello&$ world"
f := func(c rune) bool {
return !unicode.IsLetter(c) && !unicode.IsNumber(c)
}
fmt.Printf("%q", strings.FieldsFunc(str, f))
}
函数声明如下:
func FieldsFunc(s string, f func(rune) bool) []string
实际使用中,也可以使用 Fields
函数,它用于删除字符串中所有的空白字符,相当于 FieldsFunc(s, unicode.IsSpace)
:
func Fields(s string) []string
字符串修改
Trim
系列函数用于删除字符串首尾的多余字符,包括以下几种:
Trim
:删除字符串首尾的多余字符TrimLeft
:删除字符串左侧的多余字符TrimRight
:删除字符串右侧的多余字符TrimSpace
:删除字符串首尾的空格
函数声明如下:
func Trim(s string, cutset string) string
func TrimLeft(s string, cutset string) string
func TrimRight(s string, cutset string) string
func TrimSpace(s string) string
此外,strings
包还提供了一些用于字符串格式化的函数,其中最常用的是 ToLower
和 ToUpper
,分别用于将字符串转换为小写和大写。函数声明如下:
func ToLower(s string) string
func ToUpper(s string) string
其他实用函数
除了上述几类函数外,strings
包还提供了以下几个常用的实用函数:
Join
:将多个字符串组装成一个字符串,各子串之间通过分隔符连接(相当于Split
的逆操作)Compare
:通过字典序比较两个字符串的大小,相当于>
、<
、==
运算Count
:统计字符串中某个子串的出现次数Replace
:替换字符串中的指定子串
函数声明如下:
func Join(a []string, sep string) string
func Compare(a, b string) int
func Count(s, substr string) int
func Replace(s, old, new string, n int) string