Go语言 strings包

Go标准库中strings包的methods如下,加*的函数会描述用法

func Count(s, substr string) int
func Contains(s, substr string) bool                                
func ContainsAny(s, chars string) bool                              *
func ContainsRune(s string, r rune) bool                            *
func LastIndex(s, substr string) int
func IndexByte(s string, c byte) int
func IndexRune(s string, r rune) int
func IndexAny(s, chars string) int                                  *
func LastIndexAny(s, chars string) int
func LastIndexByte(s string, c byte) int
func SplitN(s, sep string, n int) []string                          *
func SplitAfterN(s, sep string, n int) []string                     *
func Split(s, sep string) []string                                  *
func SplitAfter(s, sep string) []string                             *
func Fields(s string) []string                                      *
func FieldsFunc(s string, f func(rune) bool) []string               *
func Join(a []string, sep string) string
func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool
func Map(mapping func(rune) rune, s string) string                  *
func Repeat(s string, count int) string                             *
func ToUpper(s string) string
func ToLower(s string) string
func ToTitle(s string) string                                       *
func ToUpperSpecial(c unicode.SpecialCase, s string) string         *
func ToLowerSpecial(c unicode.SpecialCase, s string) string
func ToTitleSpecial(c unicode.SpecialCase, s string) string
func Title(s string) string                                         *
func TrimLeftFunc(s string, f func(rune) bool) string
func TrimRightFunc(s string, f func(rune) bool) string
func TrimFunc(s string, f func(rune) bool) string
func IndexFunc(s string, f func(rune) bool) int
func LastIndexFunc(s string, f func(rune) bool) int
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
func TrimPrefix(s, prefix string) string
func TrimSuffix(s, suffix string) string
func Replace(s, old, new string, n int) string
func ReplaceAll(s, old, new string) string
func EqualFold(s, t string) bool                                    *
func Index(s, substr string) int
func Compare(a, b string) int

func ContainsAny(s, chars string) bool
此函数看起来和Contains很像,但是两者功能完全不同。Contains是判断s中是否存在完整的substr,而ContainsAny是判断s中是否存在chars中的任意子串

strings.Contains("Hello World", "Wo")  // true
strings.Contains("Hello World", "We")  // false
strings.ContainsAny("Hello World", "Wo")  // true
strings.ContainsAny("Hello World", "We")  // true 因为存在W

func ContainsRune(s string, r rune) bool
此函数用于判断字符串s中是否存在unicode字符r。

strings.ContainsRune("Hello 世界", rune(‘世’)) // true

func IndexAny(s, chars string) int
返回匹配到的s中第一个满足chars的任意子串的索引

strings.IndexAny("Hello", "xsel")    // 1
strings.IndexAny("Hello", "xsle")    // 1

func SplitN(s, sep string, n int) []string
以sep为分隔符,切割s,返回切割后的切片。当n>0时,表示做多n个切片。当n==0时,返回空切片,当n小于0时,完全切割。

strings.SplitN("a,b,c,f,e", " ", 3)  // [a b c,d,e]
strings.SplitN("a,b,c,f,e", " ", 0)  // []
strings.SplitN("a,b,c,f,e", " ", -1)  // [a b c d e]

func SplitAfterN(s, sep string, n int) []string
以sep为分隔符,切割s,返回切割后的切片。当n>0时,表示做多n个切片。当n==0时,返回空切片,当n小于0时,完全切割。

strings.SplitAfterN("a,b,c,f,e", " ", 3)  // [a, b, c,d,e]
strings.SplitAfterN("a,b,c,f,e", " ", 0)  // []
strings.SplitAfterN("a,b,c,f,e", " ", -1)  // [a, b, c, d, e]

SplitN和SplitAfterN的不同是SplitN会将分隔符删除,而SplitAfterN会保留分隔符

func Split(s, sep string) []string
相当于SplitN(s, sep, -1)

func SplitAfter(s, sep string) []string
相当于SplitAfterN(s, sep, -1)

func Fields(s string) []string
相当于Split(s, " "), 以空格切分字符串

func FieldsFunc(s string, f func(rune) bool) []string
用于切割unicode字符串,切割符是空格

FieldsFunc("你好啊世界", func(r rune) bool {
         return r == rune('啊')
})
// [你好 世界]

func Map(mapping func(rune) rune, s string) string
对s中的每个元素,执行mapping函数,返回执行后的结果。如果mapping中返回了负数,则整个字符串被销毁,即Map返回空字符串

strings.Map(func(r rune) rune {
    return r + 1
}, "abcde")
// bcdef

func Repeat(s string, count int) string
对s进行count次复制,并将复制结果拼接在一起,然后返回一个新字符串

strings.Repeat("Hello", 3) // HelloHelloHello

func ToTitle(s string) string
将s转换为标题模式。在我的测试情况下,ToTitle和ToUpper的输出是一样的

func ToUpperSpecial(c unicode.SpecialCase, s string) string
ToUpper只能对GO已设定的转换关系进行转换,ToUpperSpecial则是对于ToUpper的补充。

myCase := unicode.SpecialCase{
    unicode.CaseRange{'0', '0', [unicode.MaxCase]rune{'零'-'0', '零'-'0', 0}},
    unicode.CaseRange{'1', '1', [unicode.MaxCase]rune{'一'-'1', '一'-'1', 0}},
    unicode.CaseRange{'2', '2', [unicode.MaxCase]rune{'二'-'2', '二'-'2', 0}},
    unicode.CaseRange{'3', '3', [unicode.MaxCase]rune{'三'-'3', '三'-'3', 0}},
    unicode.CaseRange{'4', '4', [unicode.MaxCase]rune{'四'-'4', '四'-'4', 0}},
    unicode.CaseRange{'5', '5', [unicode.MaxCase]rune{'五'-'5', '五'-'5', 0}},
    unicode.CaseRange{'6', '6', [unicode.MaxCase]rune{'六'-'6', '六'-'6', 0}},
    unicode.CaseRange{'7', '7', [unicode.MaxCase]rune{'七'-'7', '七'-'7', 0}},
    unicode.CaseRange{'8', '8', [unicode.MaxCase]rune{'八'-'8', '八'-'8', 0}},
    unicode.CaseRange{'9', '9', [unicode.MaxCase]rune{'九'-'9', '九'-'9', 0}}}
fmt.Println(strings.ToUpperSpecial(myCase, "20190910"))   // 二零一九零九一零
/*
    type CaseRange struct {
        Lo uint32        
        Hi uint32
        Delta d
    }
    type d [MaxCase]rune

    unicode.CaseRange{'0', '0', [unicode.MaxCase]rune{'零'-'0', '零'-'0', 0}} 表示作用于'0'和'0'之间的字符,在ToUpperSpecial中,每个元素加上'零'-'0', 在ToLowerSpecial中,每个元素加上'零'-'0'(所以此处ToLowerSpecial和ToUpperSpecial结果一样),ToTitleSpecial中每个元素加上0
*/

func Title(s string) string
将s转化为标题模式

strings.Title("xiaohong is going to play baseball") // Xiaohong Is Going To Play Baseball

func Trim(s string, cutset string) string
删除字符串s左边和右边出现在cutset中的字符

strings.Trim("aabbccedd", "ad")  // bbcce

func EqualFold(s, t string) bool
判断s和t是否相等,忽略大小写

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章