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是否相等,忽略大小写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值