博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Golang源码学习----string包
阅读量:2177 次
发布时间:2019-05-01

本文共 2782 字,大约阅读时间需要 9 分钟。

String包

在go中的字符串是不可变字节序列,默认是UTF-8编码存储Unicode字符

1、分割字符串函数

主要有:

  • SplitN:按指定的字符,将字符串分割,返回指定切片长度
  • Split:按指定的字符,将字符串分割
  • SplitAfterN:按指定字符分割,但是包含字符,返回指定切片长度
  • SplitAfter :按指定字符分割,但是包含字符
  • Fields:用于分割字符串,不包括空格(跳过所用空格)
    区别前两个都不包含sep,后两个都包含

Split和SplitN函数用于分割字符串,函数原型:

func Split(s, sep string) []string 接收两个参数,s代表原串,sep代表分隔符,返回一个string切片func SplitN(s, sep string, n int) []string接收三个参数,s代表原串,sep代表分隔符,n为字段的返回一个长度为n的string切片如果sep是空则对每一个字符进行拆分	s中没有sep则返回一个长度为一的切片,内容是sSplit示例:	var str string	str = "hello world!"	tmp := strings.Split(str, " ")	fmt.Println(len(tmp), tmp)			//  2,  hello worldSplitN示例		tmp := strings.SplitN(str, "o ", 3)for _, v := range tmp{	fmt.Println(v)}fmt.Println("tmp len:", len(tmp))

SplitAfter和SplitAfterN函数分割字符串,但是会包含sep

SplitAfter(s, sep string) []stringSplitAfterN(s, sep string, n int) []string SplitAfter示例:	tmp := strings.SplitAfter(str, "o ")	for _, v := range tmp{		fmt.Println(v)	}	fmt.Println("tmp len:", len(tmp))SplotAfterN示例:	tmp := strings.SplitAfterN(str, "o ", 3)	for _, v := range tmp{		fmt.Println(v)	}	fmt.Println("tmp len:", len(tmp))

上面四个函数内部都调用函数func genSplit(s, sep string, sepSave, n int) []string

根据n和sep来判断分割情况,sepSave用于表示sep会不会保留,是sep的长度

func genSplit(s, sep string, sepSave, n int) []string {	...	if sep == "" {		return explode(s, n)	}	if n < 0 {		n = Count(s, sep) + 1	}	...	m := Index(s, sep)	....}n不能等于0,n必须大于0或者小于0sep==""时使用explode将s中的字符全部拆分如果n小于0时需要根据s和sep来计算出s中sep的个数函数是CountIndex返回s中sep的第一个实例索引

2、Index的应用

Index函数用于返回s中substr的下标

func Index(s, substr string) int

不但是一个外部接口也是被内部函数所使用func Contains(s, substr string) bool

Contains用于判断substr是否存在于s中
示例:

func testCtains(str, subStr string){		if strings.Contains(str, subStr){			fmt.Println("Exist",)		} else {			fmt.Println("Not exist")		}	}

和Index相似的函数有

  • IndexAny:IndexAny(s, chars string)返回chars在s中的找到的第一个实例索引
  • LastIndexAny:返回最后一个元素的实例索引,(倒叙)
  • LastIndex:返回最后一个实例索引
  • LastIndexByte:LastIndexByte(s string, c byte) int返回字符c在s中的最后一个实例索引
  • IndexByte:返回c在s中第一个实例索引

3、Join函数

将a的字符串连接起来,以sep为间隔符

func Join(a []string, sep string) string

示例:

strs := make([]string, 0)	for i := 0; i < 5; i ++{		strs = append(strs, "hello")	}	str := strings.Join(strs, "-")	fmt.Println(str)

join源码:

func Join(a []string, sep string) string {	switch len(a) {	case 0:		return ""	case 1:		return a[0]	case 2:		// Special case for common small values.		// Remove if golang.org/issue/6714 is fixed		return a[0] + sep + a[1]	case 3:		// Special case for common small values.		// Remove if golang.org/issue/6714 is fixed		return a[0] + sep + a[1] + sep + a[2]	}	//计算出结果字符串的大小	n := len(sep) * (len(a) - 1)	for i := 0; i < len(a); i++ {		n += len(a[i])	}	b := make([]byte, n)	bp := copy(b, a[0])	for _, s := range a[1:] {		bp += copy(b[bp:], sep)		bp += copy(b[bp:], s)	}	return string(b)}代码中是根据a的大小来进行操作,小于三时处理方式比较简单使用+如果len(a)过大时使用遍历

转载地址:http://rdfkb.baihongyu.com/

你可能感兴趣的文章
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>
【Pyton】【小甲鱼】魔法方法
查看>>