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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Go 语言中,`strings` 提供了 `Split` 函数用于将字符串按照指定的分隔符分割成多个子字符串,并返回一个字符串切片(`[]string`)。以下是 `Split` 函数的详细用法: ```go func Split(s, sep string) []string ``` 其中 `s` 代表需要分割的字符串,`sep` 代表分隔符。例如,如果想按照逗号 `,` 分割字符串,可以使用以下代码: ```go str := "apple,banana,orange" arr := strings.Split(str, ",") ``` 此时 `arr` 切片中的元素为 `["apple", "banana", "orange"]`。 如果想按照多个分隔符分割字符串,可以使用 `FieldsFunc` 函数,需要传入一个函数类型的参数,这个函数用于判断某个字符是否为分隔符。例如,如果想按照逗号 `,` 或空格分割字符串,可以使用以下代码: ```go str := "apple,banana orange" arr := strings.FieldsFunc(str, func(c rune) bool { return c == ',' || c == ' ' }) ``` 此时 `arr` 切片中的元素为 `["apple", "banana", "orange"]`。 如果要限制分割出来的子字符串数量,可以使用 `SplitN` 函数,需要传入一个 `n` 参数,代表最多分割出多少个子字符串。例如,如果想最多分割出两个子字符串,可以使用以下代码: ```go str := "apple,banana,orange" arr := strings.SplitN(str, ",", 2) ``` 此时 `arr` 切片中的元素为 `["apple", "banana,orange"]`。 需要注意的是,如果分隔符是一个字符串而不是单个字符,可以使用 `SplitAfter` 和 `SplitAfterN` 函数,它们与 `Split` 和 `SplitN` 函数的区别在于返回的子字符串中含分隔符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值