Golang官方包strings

GOLANG strings官方包代码接口

  • 简介:
  • strings判断
  • strings查找
  • strings转换
  • 叠加
  • 连接字符串
  • 替换
  • 修剪
  • 分割字符串
  • Reader
    • 简介
  • Replacer
    • 简介

简介:

strings是go语言官方包,主要实现了用于操作字符的简单函数。

strings判断

func EqualFold(s, t string) bool
判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。

	strings.EqualFold("poplknight","POPLKNIGHT") // true 

func HasPrefix(s, prefix string) bool
判断s是否有前缀字符串prefix。

	strings.HasPrefix("poplknight","")//true
	strings.HasPrefix("poplknight","pop")//true
	strings.HasPrefix("poplknight","poplknight")//true

func HasSuffix(s, suffix string) bool
判断s是否有后缀字符串suffix。

	strings.HasSuffix("poplknight","")//true
	strings.HasSuffix("poplknight","ght")//true
	strings.HasSuffix("poplknight","poplknight")//true

func Contains(s, substr string) bool
判断字符串s是否包含子串substr(如果substr为空字符串,则结果一定为T)。

	strings.Contains("poplknight", "")//true
	strings.Contains("poplknight", "")//true
	strings.Contains("poplknight", "")//true

func ContainsRune(s string, r rune) bool
判断字符串s是否包含utf-8码值r。

	strings.ContainsRune("poplknight",rune('p'))//true

func ContainsAny(s, chars string) bool
判断字符串s是否包含字符串chars中的任一字符。

	strings.ContainsAny("poplknight","!@#123POpA")//true
	strings.ContainsAny("poplknight", "") //false
	strings.ContainsAny("", "") //false

strings查找

func Count(s, sep string) int
返回字符串s中有几个不重复的sep子串。

	strings.Count("poplknight","")//11
	strings.Count("poplknight","p")//2
	strings.Count("poplknight","night")//1

func Index(s, sep string) int
子串sep在字符串s中第一次出现的位置,不存在则返回-1。

	strings.Index("poplknight","l")//3
	strings.Index("poplknight","")//0

func IndexByte(s string, c byte) int
字符c在s中第一次出现的位置,不存在则返回-1,大小写敏感。

	strings.IndexByte("poplknight",byte('k'))//4
	strings.IndexByte("poplknight",byte('K'))//-1

func IndexRune(s string, r rune) int
unicode码值r在s中第一次出现的位置,不存在则返回-1,大小写敏感。

	strings.IndexByte("poplknight",byte('k'))//4
	strings.IndexByte("poplknight",byte('K'))//-1

func IndexAny(s, chars string) int
字符串chars中的任一utf-8码值在s中第一次出现的位置,如果不存在或者chars为空字符串则返回-1。

	strings.IndexAny("poplknight","P")//-1
	strings.IndexAny("poplknight","pweq")//0

func IndexFunc(s string, f func(rune) bool) int
s中第一个满足函数f的位置i(该处的utf-8码值r满足f®==true),不存在则返回-1。

	//字符是o的字母在第几位
	strings.IndexFunc("poplknight", func(r rune) bool {
		if r == 'o' {
			return true
		}
		return false
	})//1

这几个和上面基本一样
func LastIndex(s, sep string) int
子串sep在字符串s中最后一次出现的位置,不存在则返回-1。
func LastIndexAny(s, chars string) int
字符串chars中的任一utf-8码值在s中最后一次出现的位置,如不存在或者chars为空字符串则返回-1。
func LastIndexFunc(s string, f func(rune) bool) int
s中最后一个满足函数f的unicode码值的位置i,不存在则返回-1。

strings转换

func Title(s string) string
把s中每个单词的首字母改为大写(类似于驼峰命名一样= =。)。
func ToLower(s string) string
把s字符串所有字符变成小写(代码就忽略吧。)
func ToTitle(s string) string
把s中每个单词的所有字母改为大写(官方说是把s字符串变成标题格式。。。)
func ToUpper(s string) string
把s中每个单词的所有字母改为大写(与上一个基本相同。)

	strings.Title("pOPLKNIGHT") // POPLKNIGHT注意:后面的部分不会给改为小写
	strings.ToTitle("poplKnight")//POPLKNIGHT
	strings.ToUpper("poplknight")//POPLKNIGHT

func ToTitleSpecial(_case unicode.SpecialCase, s string) string
所有字母转为标题格式
func ToLowerSpecial(_case unicode.SpecialCase, s string) string
所有字母转为小写格式
func ToUpperSpecial(_case unicode.SpecialCase, s string) string
所有字母转为大写格式
func Map(mapping func(rune) rune, s string) string
前面三个Special内部都是调用了Map函数。这个函数的作用是将s的每一个unicode码值r都替换为mapping®,返回这些新码值组成的字符串拷贝。如果mapping返回一个负值,将会丢弃该码值而不会被替换。

叠加

func Repeat(s string, count int) string
返回count个s

连接字符串

func Join(a []string, sep string) string
将一系列字符串连接为一个字符串,之间用sep来分隔

替换

func Replace(s, old, new string, n int) string
替换s字符串中n个old字符串为new字符串 n<0 时替换所有的old字符串

修剪

func Trim(s string, cutset string) string
将s字符串的前后端包涵cutset字符串中字符的都去掉。(基于unicode码进行删除)

	strings.Trim("+-*/poplknight+_*/", "+*-") ///poplknight+_*/

func TrimSpace(s string) string
删除s中所有的空格
func TrimFunc(s string, f func(rune) bool) string
删除s中左右两端所有符合f函数调用结果为true的字符
func TrimLeft(s string, cutset string) string
Trim的削弱版只删除左半部分
func TrimLeftFunc(s string, f func(rune) bool) string
删除s中左半边所有符合f函数调用结果为true的字符
func TrimRight(s string, cutset string) string
Trim削弱版之删除右半部分
func TrimRightFunc(s string, f func(rune) bool) string
删除s中右半边所有符合f函数调用结果为true的字符
func TrimPrefix(s, prefix string) string
删除s可能的前缀prefix的字符串
func TrimSuffix(s, suffix string) string
删除s可能的后缀suffix 的字符串

	strings.TrimPrefix("+-*/poplknight+_*/", "+-*/")//poplknight+_*/
	strings.TrimSuffix("+-*/poplknight+_*/", "+_*/")//+-*/poplknight

分割字符串

func Fields(s string) []string
将s字符串按照空格分割成多个字符串。如果字符串全部是空白或者是空字符串的话,会返回一个空切片
func FieldsFunc(s string, f func(rune) bool) []string
将s字符串按照f函数调用为true的结果分割为多个字符串
func Split(s, sep string) []string
将s字符串以sep字符串进行分割,
注意:两个连在一起的sep会分割两次,如果sep传值为"“会将整个字符串分割成一个一个的字符
有一个特殊用法,当s为中文,输入的sep为”"后,并不会输出一堆乱码,而是一个一个的字。
func SplitN(s, sep string, n int) []string
将s字符串以sep字符串进行n次分割,n=0 返回nil, n<0 等同于Split函数
func SplitAfter(s, sep string) []string
将s字符串以sep字符串进行n次分割
func SplitAfterN(s, sep string, n int) []string
将s字符串以sep字符串进行n次分割,n=0 返回nil, n<0 等同于Split函数

	strings.Split("Countoutput:Countoutput:Count output:", "put:")
	//[Countout Countout Count out ]
	strings.SplitN("Countoutput:Countoutput:Count output:", "put:", 2)
	//[Countout Countoutput:Count output:]
	strings.SplitAfter("Countoutput:Countoutput:Count output:", "put:")
	//[Countoutput: Countoutput: Count output: ]
	strings.SplitAfter("Countoutput:Countoutput:Count output:", "put:", 2)
	//[Count output:  Count output: Count output:  ]

Reader

简介

	reader是io包的接口实现,在使用中经常会用到,主要是通过字符串读取数据。

func NewReader(s string) *Reader
new一个Reader结构体,返回指针(我喜欢说成用字符串s做一个Reader)
func (r *Reader) Len() int
返回r中还没有被读取的部分
func (r *Reader) Size() int
返回字符串s的长度
func (r *Reader) Read(b []byte) (n int, err error)
将r中数据读取到b中 返回的n为 读取了多少个字节

	buff := make([]byte, 512)
	//将字符读取到buff中
	n, _ := reader.Read(buff)
	fmt.Printf("reader.Len(%d) Read: -%s-\n", reader.Len(), buff[ :n])
	//reader.Len(0) Read: -很多年以前,关于青春的电影很受欢迎,此后每年,我们都可以看到很多热门电影是关于主人公逝去的青春。-
	//可以看到这里的Len已经是0了,说明已经被读取完了,如果想知道reader字符串的长度要用size
	//如果想继续读,可以使用peek或者seek。
	//感觉真是奇怪。。。。

func (r *Reader) ReadByte() (b byte, err error)
这个看的我一脸懵(滴。。。)就是,实在不明白为什么要读取一个字节,试探性的读取一下看看err会不会 读取上来???希望评论区大佬给解答一下,反正我是没用过这个
func (r *Reader) UnreadByte() error
撤销操作,与ReadByte互为反操作。更懵(滴。。。)的来了。。。。。。
func (r *Reader) ReadRune() (ch rune, size int, err error)
读取一整个unicode值,如果是中文会直接读取一个字。
func (r *Reader) UnreadRune() error
撤销操作,与ReadRune互为反操作。
func (r *Reader) Seek(offset int64, whence int) (int64, error)
偏移光标位置,offset偏移多少,whence从哪偏移,0开头,1当前,2结尾,返回值为偏移后的位置
func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
从开头偏移off字节后开始读取b.len大小个字节
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
写入操作

Replacer

简介

用于替换的结构体
func NewReplacer(oldnew …string) *Replacer
通过oldnew值对的方式做一个Replacer结构体
func (r *Replacer) Replace(s string) string
对s进行预先设定键值的替换
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
写入进行替换后写入w

你可能感兴趣的:(go,strings)