strings包用法

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-----------------------------")
}

  

猜你喜欢

转载自www.cnblogs.com/joker8/p/8976421.html