package stringTest import ( "fmt" "strings" "unicode" ) /*StringTest is testing code for package strings*/ /*https://studygolang.com/articles/5769*/ func Test() { fmt.Println("---------------------------String start-----------------------------") jordan := "I can accept failure,but i can not accept not trying" jordan1 := jordan[:6] jordan2 := "I,can,accept,failure,but,i,can,not,aceept,not,trying\u5927" kobe := "the second is the first loser" fmt.Println(strings.Compare(jordan, kobe)) fmt.Println(strings.Contains(jordan, jordan1)) fmt.Println(strings.ContainsAny(jordan, "abcd")) fmt.Println(strings.ContainsRune(jordan, rune('a'))) /*返回substr在s中和出现的次数,如果substr是空的话,则返回s的unicode字符数量(并不是字节数) + 1*/ fmt.Println(strings.Count(jordan2, ""), len(jordan2)) /*不区分大小写比较字符串*/ fmt.Println(strings.EqualFold(jordan, strings.ToUpper(jordan))) /*把string转换成[]string的切片*/ fmt.Println(strings.Fields(jordan)) /*自定义string转换成[]string的分隔符*/ fmt.Println(strings.FieldsFunc(jordan2, func(r rune) bool { if r == rune(',') { return true } return false })) fmt.Println(strings.HasPrefix(jordan, jordan[:2])) fmt.Println(strings.HasSuffix(jordan, jordan[5:])) fmt.Println(strings.Index(jordan, "accept")) fmt.Println(strings.IndexAny(jordan, jordan[3:5])) fmt.Println(strings.IndexByte(jordan, 'c')) fmt.Println(strings.IndexFunc(jordan, func(r rune) bool { if r == rune(' ') { return true } return false })) fmt.Println(strings.IndexRune(jordan, rune('a'))) fmt.Println(strings.LastIndex(jordan, "accept")) fmt.Println(strings.LastIndexAny(jordan, "accept")) fmt.Println(strings.LastIndexByte(jordan, 'c')) fmt.Println(strings.LastIndexFunc(jordan, func(r rune) bool { if r >= rune('x') { return true } return false })) /*把[]string的切片合并成一个string,并且以sep为分隔符*/ fmt.Println(strings.Join(strings.Fields(jordan), ":")) /*符合mapping函数的字符会替换原来字符串的字符,如果mapping返回负数,那么对应的字节被删除*/ fmt.Println(strings.Map(func(r rune) rune { if r >= 'a' && r <= 'z' { return r - ('a' - 'A') } return r }, jordan)) readbuf := make([]byte, len(jordan)) r := strings.NewReader(jordan) _, _ = r.Read(readbuf) fmt.Printf("%c", readbuf) fmt.Println() /* * NewReplacer(s ...string) *Replacer,通过输入参数生成一个*Replacer对象,参数必须成对出现 * 第1个参数替换第2个,第3个替换第4个....,当参数列表中有重复的替换规则,则重复的部分被忽略 * **/ jordan3 := strings.Join(strings.Fields(jordan), ":") replacer := strings.NewReplacer("hello", "你好", "world", "世界", "!", "!", "hello", "你好") helloworld := "hello world hello world!!" fmt.Println(replacer.Replace(helloworld)) //你好 世界 你好 世界 !! /*把string分隔成[]string切片,并且以sep为分隔符,如果s中不存在sep分隔符,则返回一整个字符串*/ fmt.Println(strings.Split(jordan3, ":")) /*把string分隔成[]string切片,并且以sep为分隔符,如果s中包含sep分隔符,则返回一整个字符串*/ fmt.Println(strings.SplitAfter(jordan3, ":")) /*把string分隔成[]string切片,并且以sep为分隔符,如果s中包含sep分隔符,则返回一整个字符串 * n=0,返回nil * n < 0 全部切片,和SplitAfter()一样 * n > 0 表示最多切片成n个字符串,超出部分不再切片 **/ fmt.Println(strings.SplitAfterN(jordan3, ":", -1)) fmt.Println(strings.SplitAfterN(jordan3, ":", 3)) fmt.Println(strings.SplitAfterN(jordan3, ":", 0)) /*和SplitAfterN一样,只是结果中不包含分隔符sep*/ fmt.Println(strings.SplitN(jordan3, ":", -1)) fmt.Println(strings.SplitN(jordan3, ":", 3)) fmt.Println(strings.SplitN(jordan3, ":", 0)) /*将字符串的首字母转换成title格式,大部分字符的title格式都是其大写字母,少数是特殊字符*/ fmt.Println(strings.Title("hello world")) fmt.Println(strings.ToTitle("hello world")) // fmt.Println(strings.ToTitleSpecial()) fmt.Println(strings.ToLower(strings.ToTitle("hello world"))) fmt.Println(strings.ToUpper("chenyanpeng")) //删除s首尾中连续出现在cutset中的字符 fmt.Println(strings.Trim(jordan3, "I:tpecairtyng")) fmt.Println(strings.TrimFunc(jordan3, func(r rune) bool { if r == 'I' || r == ':' || (r >= 'a' && r <= 'z') { return true } return false })) /*删除首部连续出现在cutset中的字符*/ fmt.Println(strings.TrimLeft(jordan3, "Iacdcn:")) fmt.Println(strings.TrimLeftFunc(jordan3, func(r rune) bool { return false })) /*删除尾部连续出现在cutset中的字符*/ fmt.Println(strings.TrimRight(jordan3, "ynigrt")) fmt.Println(strings.TrimRightFunc(jordan3, func(r rune) bool { return false })) /*删除首尾连续出现的空白字符*/ fmt.Println(strings.TrimSpace(" afafaadfab ")) fmt.Println(strings.TrimPrefix(jordan, jordan[:4])) fmt.Println(strings.TrimSuffix(jordan, jordan[4:])) /* * 'a','c'表示a-c,就是abc三个字符 * ToUpperSpecial表示a-c每个字符都加上'陈'-'a' * ToLowerSpecial表示a-c每个字符都加上'燕'-'b' * ToTitleSpecial表示a-c每个字符都加上'鹏'-'c' **/ var _mycase = unicode.SpecialCase{ unicode.CaseRange{Lo: 'a', Hi: 'c', Delta: [unicode.MaxCase]rune{'x' - 'a', 'y' - 'b', 'z' - 'c'}}, // unicode.CaseRange{'a', 'b', [unicode.MaxCase]rune{}}, // unicode.CaseRange{'a', 'b', [unicode.MaxCase]rune{}}, } fmt.Println(strings.ToUpperSpecial(_mycase, "aaaaaaabnijbijbsfbsbgjsb")) fmt.Println(strings.ToLowerSpecial(_mycase, "bbbbbbbFGKNSGJSNGNSGSGSG")) fmt.Println(strings.ToTitleSpecial(_mycase, "cccccccoijoipkppkoopkkpo")) fmt.Println("---------------------------String end-----------------------------") }