好用不过官方库之strings
拒绝重复造轮子,看看那些好用的官方库的包,这里仅仅总结我自己觉得好用的库及应用点,具体包函数可查看go官方库
strings包实现了用于操作字符的简单函数。
strings 判断
func EqualFold
func EqualFold(s, t string) bool
判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。不论大小写,只判断字符。
fmt.Println(strings.EqualFold("Go", "go")) //true
func HasPrefix
func HasPrefix(s, prefix string) bool {
//字符串长度大于等于前缀且等于字符串前几位等于前缀
return len(s) >= len(prefix) && s[0:len(prefix)] == prefix
}
判断s是否有前缀字符串prefix。
fmt.Println(strings.HasPrefix("abcefg", "abc")) //true
fmt.Println(strings.HasPrefix("abcefg", "e")) //false
func HasSuffix
func HasSuffix(s, suffix string) bool {
//字符串长度大于等于后缀且等于字符串后几位等于后缀
return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
}
判断s是否有后缀字符串suffix。
fmt.Println(strings.HasPrefix("abcefg", "efg")) //true
fmt.Println(strings.HasPrefix("abcefg", "e")) //false
func Index
func Index(s, sep string) int
子串sep在字符串s中第一次出现的位置,不存在则返回-1。
func LastIndex
func LastIndex(s, sep string) int
子串sep在字符串s中最后一次出现的位置,不存在则返回-1。
fmt.Println(strings.Index("go gopher", "go")) //0
fmt.Println(strings.LastIndex("go gopher", "go")) //3
fmt.Println(strings.LastIndex("go gopher", "rodent")) //-1
func Contains
func Contains(s, substr string) bool {
//即Index函数大于0则包含字串
return Index(s, substr) >= 0
}
判断字符串s是否包含子串substr。
fmt.Println(strings.Contains("seafood", "foo")) //true
strings 处理
func ToLower
func ToLower(s string) string
返回将所有字母都转为对应的小写版本的拷贝。
func ToUpper
func ToUpper(s string) string
返回将所有字母都转为对应的大写版本的拷贝。
func Repeat
func Repeat(s string, count int) string
返回count个s串联的字符串。
func Replace
func Replace(s, old, new string, n int) string
返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。
fmt.Println(strings.ToLower("Gopher")) //gopher
fmt.Println(strings.ToUpper("Gopher")) //GOPHER
fmt.Println("ba" + strings.Repeat("na", 2)) //banana
fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) //oinky oinky oink
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) //moo moo moo
func TrimPrefix
func TrimPrefix(s, prefix string) string {
if HasPrefix(s, prefix) {
return s[len(prefix):]
}
return s
}
返回去除s可能的前缀prefix的字符串。
func TrimSuffix
func TrimSuffix(s, suffix string) string {
if HasSuffix(s, suffix) {
return s[:len(s)-len(suffix)]
}
return s
}
返回去除s可能的后缀suffix的字符串。
strings 分割
func Fields
func Fields(s string) []string
返回将字符串按照空白(unicode.IsSpace确定,可以是一到多个连续的空白字符)分割的多个字符串。如果字符串全部是空白或者是空字符串的话,会返回空切片。
func Split
func Split(s, sep string) []string
用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。
fmt.Printf("%q\n", strings.Fields(" foo bar baz "))
fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
fmt.Printf("%q\n", strings.Split(" xyz ", ""))
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))
//["foo" "bar" "baz"]
//["a" "b" "c"]
//["" "man " "plan " "canal panama"]
//[" " "x" "y" "z" " "]
//[""]
strings 合并
func Join
func Join(a []string, sep string) string
将一系列字符串连接为一个字符串,之间用sep来分隔。
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
//foo, bar, baz