golang 中常见字符串函数

字符串处理在实际项目应用中是比较常见的,一门好的语言会提供非常全的字符串处理功能,golang也不例外。

文章目录

前言

一、字符串函数是什么?

二、有哪些常用的字符串函数

1.len() —— 获取字符串长度

2.[]rune —— 中文字符串的遍历

 3.strconv.Atoi() —— 字符串转整数

4.strconv.Itoa() —— 整数转字符串

5.[]byte("") —— 字符串转byte切片

6.string([]byte{.., ..., ...}) —— byte切片转字符串

7.strconv.FormatInt(100, 2) —— 整数转二、八、十六进制字符串

8.strings.contains(s1, s2) —— 字符串s1是否包含字符串s2

9.strings.Count(s1, s2) —— 统计字符串s1中有几个s2

10.s1==s2 与 strings.EqualFold(s1, s2) —— 判断字符串是否相等

 11.strings.Index(s1, s2) —— 字符串s2在s1中第一次出现的位置

 12.strings.LastIndex(s1, s2) —— 字符串s2在s1中最后一次出现的位置

13.strings.Replace(s1, s2, s3, num) —— 替换字符串

14.strings.Split(s1, s2) —— 将字符串s1按s2分隔拆分成一个数组

15.strings.ToLower(s1)、strings.ToUpper(s2) —— 将字符串进行大小写转换

16.strings.TrimSpace(s1) —— 将字符串s1左右两边的空格去除

17.strings.Trim(s1, s2) —— 将字符串s1左右两边指定的字符串s2去除

18.strings.TrimLeft(s1, s2) / strings.TrimRight(s1, s2)—— 分别是去除字符串s1左边/右边指定的字符串s2

19.strings.HasPrefix(s1, s2) / strings.HasSuffix(s1, s2)—— 分别是判断指定的字符串s1是否是以s2开头/结尾

总结


前言

实际项目开发过程中,我们接触最多的就是字符串的处理,字符串函数掌握的越多,对我们开发效率的提升就越多。今天我们就来聊一下golang 中好用的字符串函数。


一、字符串函数是什么?

用来处理字符串数据,实现各种转换或适应各种使用场景

二、有哪些常用的字符串函数

1.len() —— 获取字符串长度

str1 := "hello"
fmt.Printf("字符串的长度为: %v\n", len(str1))

输出结果 :   

字符串的长度为: 5

当字符串有中文字时,一个中文字相当于是三个字节 ,golang的编码统一为utf-8(ascii的字符(字母和数字)占1个字节,汉字占用3个字节)

str2 := "hello世界"
fmt.Printf("字符串长度为:%v\n", len(str2))

输出结果:

字符串长度为:11

2.[]rune —— 中文字符串的遍历

当字符串中有中文时,如果要遍历就需要用到rune的切片,否则中文乱码,如下

str2 := "hello世界"
for i := 0; i < len(str2); i++ {
	fmt.Printf("第%v个字符是:%c\n", i, str2[i])
}

输出结果:

此时就需要使用切片rune进行遍历:

str2 := "hello世界"
r := []rune(str2)
for i := 0; i < len(r); i++ {
	fmt.Printf("第%v个字符是:%c\n", i, r[i])
}

输出结果:

 3.strconv.Atoi() —— 字符串转整数

此函数可以直接将字符串的数字转为整数,但如果字符串不是整数则会报错:

str3 := "100"
num, err := strconv.Atoi(str3)
if nil == err {
	fmt.Printf("字符串转换之后的类型是%T, 结果是:%v\n", num, num)
} else {
	fmt.Println("转换错误:", err)
}

输出结果:

字符串转换之后的类型是int, 结果是:100

假如字符串不是数字:

str3 := "100美元"
num, err := strconv.Atoi(str3)
if nil == err {
	fmt.Printf("字符串转换之后的类型是%T, 结果是:%v\n", num, num)
} else {
	fmt.Println("转换错误:", err)
}

输出结果:

转换错误: strconv.Atoi: parsing "100美元": invalid syntax

4.strconv.Itoa() —— 整数转字符串

num := 100
str5 := strconv.Itoa(num)
fmt.Printf("转换之后的类型是: %T,值为:%v\n", str5, str5)

输出结果为:

转换之后的类型是: string,值为:100

5.[]byte("") —— 字符串转byte切片

str := "这是一个字符串"
bytes := []byte(str)
fmt.Printf("转换之后的类型是:%T, 值是:%v\n", bytes, bytes)

输出结果为:

转换之后的类型是:[]uint8, 值是:[232 191 153 230 152 175 228 184 128 228 184 170 229 173 151 231 172 166 228 184 178]

6.string([]byte{.., ..., ...}) —— byte切片转字符串

str := string([]byte{100, 103, 108})
fmt.Printf("转换之后的类型是:%T,值是:%v\n", str, str)

输出结果为:

转换之后的类型是:string,值是:dgl

7.strconv.FormatInt(100, 2) —— 整数转二、八、十六进制字符串

str2 := strconv.FormatInt(100, 2)
fmt.Printf("100转换成二进制之后的类型是:%T, 值为:%v\n", str2, str2)
str8 := strconv.FormatInt(100, 8)
fmt.Printf("100转换成八进制之后的类型是:%T, 值为:%v\n", str8, str8)
str16 := strconv.FormatInt(100, 16)
fmt.Printf("100转换成十六进制之后的类型是:%T, 值为:%v\n", str16, str16)

输出结果为:

100转换成二进制之后的类型是:string, 值为:1100100
100转换成八进制之后的类型是:string, 值为:144 
100转换成十六进制之后的类型是:string, 值为:64

8.strings.contains(s1, s2) —— 字符串s1是否包含字符串s2

b := strings.Contains("你好,世界", "世界")
fmt.Printf("b的类型是:%T, '你好,世界'是否包含'世界': %v\n", b, b)

输出结果:

b的类型是:bool, '你好,世界'是否包含'世界': true

再看一下不包含的:

b := strings.Contains("你好,世界", "人生")
fmt.Printf("b的类型是:%T, '你好,世界'是否包含'人生': %v\n", b, b)

输出结果:

b的类型是:bool, '你好,世界'是否包含'人生': false

9.strings.Count(s1, s2) —— 统计字符串s1中有几个s2

num := strings.Count("Chinese", "e")
fmt.Printf("num的类型是:%T,值为:%v\n", num, num)

输出结果:

num的类型是:int,值为:2

10.s1==s2 与 strings.EqualFold(s1, s2) —— 判断字符串是否相等

双等号(==)是区分大小写的;strings.EqualFold()是不区分大小写的:

s1 := "123abc"
s2 := "123ABC"
b := strings.EqualFold(s1, s2)
fmt.Printf("b的类型是:%T,值为:%v\n", b, b)
fmt.Println("s1是否是123abc: ", s1 == "123abc")
fmt.Println("s1是否与s2相等:", s1 == s2)

输出结果:

b的类型是:bool,值为:true
s1是否是123abc:  true 
s1是否与s2相等: false

 11.strings.Index(s1, s2) —— 字符串s2在s1中第一次出现的位置

此函数返回的结果是整数,如果存在则返回位置,如果不存在则返回-1:

s1 := "123abc"
s2 := "bc"
s3 := "2f"
index1 := strings.Index(s1, s2)
index2 := strings.Index(s1, s3)
fmt.Printf("index1的类型是:%T,值为:%v\n", index1, index1)
fmt.Printf("index2的类型是:%T, 值为:%v\n", index2, index2)

输出结果:

index1的类型是:int,值为:4
index2的类型是:int, 值为:-1

 12.strings.LastIndex(s1, s2) —— 字符串s2在s1中最后一次出现的位置

此函数返回的结果是整数,如果存在则返回最后一次出现的位置,如果不存在则返回-1:

s1 := "123abc123"
s2 := "123"
s3 := "456"
index1 := strings.LastIndex(s1, s2)
index2 := strings.LastIndex(s1, s3)
fmt.Printf("index1的类型是:%T,值为:%v\n", index1, index1)
fmt.Printf("index2的类型是:%T, 值为:%v\n", index2, index2)

输出结果:

index1的类型是:int,值为:6
index2的类型是:int, 值为:-1

13.strings.Replace(s1, s2, s3, num) —— 替换字符串

将字符串s1中的s2子串替换成s3字符串,num表示希望替换几个,如果num是-1则表示全部替换:

s1 := "123abc123"
s2 := "123"
s3 := "456"
s4 := strings.Replace(s1, s2, s3, 1)
s5 := strings.Replace(s1, s2, s3, -1)
fmt.Printf("s1的类型是:%T,值为:%v\n", s4, s4)
fmt.Printf("s2的类型是:%T, 值为:%v\n", s5, s5)

输出结果:

s1的类型是:string,值为:456abc123
s2的类型是:string, 值为:456abc456

14.strings.Split(s1, s2) —— 将字符串s1按s2分隔拆分成一个数组

s1 := "1,2,3,5,6,9,男,女,未知"
s2 := ","
strArr := strings.Split(s1, s2)
fmt.Printf("strArr的类型是:%T,值为:%v\n", strArr, strArr)
for i := 0; i < len(strArr); i++ {
	fmt.Printf("第%v个是:%v\n", i, strArr[i])
}

输出结果:

strArr的类型是:[]string,值为:[1 2 3 5 6 9 男 女 未知]
第0个是:1
第1个是:2
第2个是:3
第3个是:5
第4个是:6
第5个是:9
第6个是:男
第7个是:女
第8个是:未知

15.strings.ToLower(s1)、strings.ToUpper(s2) —— 将字符串进行大小写转换

str1 := "golang"
str2 := "GO GO GO "
str3 := strings.ToUpper(str1)
str4 := strings.ToLower(str2)
fmt.Printf("str3的类型是:%T,值为:%v\n", str3, str3)
fmt.Printf("str4的类型是:%T,值为:%v\n", str4, str4)

输出结果:

str3的类型是:string,值为:GOLANG
str4的类型是:string,值为:go go go

16.strings.TrimSpace(s1) —— 将字符串s1左右两边的空格去除

str1 := "                              golang                                  "
str2 := strings.TrimSpace(str1)
fmt.Printf("str2的类型是:%T,值为:%v\n", str2, str2)

输出结果:

str2的类型是:string,值为:golang

17.strings.Trim(s1, s2) —— 将字符串s1左右两边指定的字符串s2去除

str1 := "????????????????!!!!!!!!!golang!!!!!!!!??????????????"
str2 := strings.Trim(str1, "?")
str3 := strings.Trim(str2, "!")
fmt.Printf("str2的类型是:%T,值为:%v\n", str2, str2)
fmt.Printf("str2的类型是:%T,值为:%v\n", str3, str3)

输出结果:

str2的类型是:string,值为:!!!!!!!!!golang!!!!!!!!
str2的类型是:string,值为:golang

18.strings.TrimLeft(s1, s2) / strings.TrimRight(s1, s2)—— 分别是去除字符串s1左边/右边指定的字符串s2

str1 := "????????????????golang!!!!!!!!!!!!!!!!!!!!!"
str2 := strings.TrimLeft(str1, "?")
str3 := strings.TrimRight(str2, "!")
fmt.Printf("str2的类型是:%T,值为:%v\n", str2, str2)
fmt.Printf("str2的类型是:%T,值为:%v\n", str3, str3)

输出结果:

str2的类型是:string,值为:golang!!!!!!!!!!!!!!!!!!!!!
str2的类型是:string,值为:golang

19.strings.HasPrefix(s1, s2) / strings.HasSuffix(s1, s2)—— 分别是判断指定的字符串s1是否是以s2开头/结尾

s1 := "sftp://192.168.1.3"
s2 := "abc.jpg"
isSftp := strings.HasPrefix(s1, "sftp")
isJpg := strings.HasSuffix(s2, ".jpg")
fmt.Printf("isSftp的类型是:%T,值为:%v\n", isSftp, isSftp)
fmt.Printf("isJpg的类型是:%T,值为:%v\n", isJpg, isJpg)

输出结果:

isSftp的类型是:bool,值为:true
isJpg的类型是:bool,值为:true


总结


以上就是golang里常用的字符串函数,golang内置函数提供了强大字符串处理库,有兴趣的同学可以到go语言中文网查看其文档自行研究

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yezhijing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值