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

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