首页 > 其他分享 >(转)一文了解 Go 标准库 strings 常用函数和方法

(转)一文了解 Go 标准库 strings 常用函数和方法

时间:2023-02-28 23:13:13浏览次数:40  
标签:string s2 s1 字符串 Go println strings 一文

原文:https://blog.csdn.net/weixin_44604586/article/details/128104981?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-128104981-blog-104933213.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-128104981-blog-104933213.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=5

strings 库
strings 库包含了许多高效的字符串常用操作的函数和方法,巧用这些函数与方法,能极大的提高我们程序的性能。下面介绍一些常用的函数和方法。

高效拼接字符串
使用 strings 库里的 Builder 变量,结合其写入方法如 WriteString 方法,可以进行高效的拼接字符串。

import (
"strings"
)

func main() {
var builder strings.Builder
builder.WriteString("hello")
builder.WriteString(" ")
builder.WriteString("world")
builder.WriteString("!")
s := builder.String()
println(s) // hello world!
}
1
2
3
4
5
6
7
8
9
10
11
12
13
strings.Builder 底层是通过其内部的 slice 来储存内容的。当调用其相关的写入方法(如 WriteString )的时,新的字节数据就会被追加到 slice 上。相比普通字符串的多次拼接,减少了拼接时需要创建新字符串的内存开销。

大小写转换
小写转大写
ToUpper(s string) string:将一个字符串里的小写字符转成大写,因为字符串不可变的特点,该函数会返回一个新的字符串。
import "strings"

func main() {
s1 := "hello"
s2 := strings.ToUpper(s1)
println(s2) // HELLO
}
1
2
3
4
5
6
7
ToUpper(s string) string 函数的作用是,
大写转小写
ToLower(s string) string:将一个字符串里的大写字符转成小写,因为字符串不可变的特点,该函数会返回一个新的字符串。
import "strings"

func main() {
s1 := "HELLO"
s2 := strings.ToLower(s1)
println(s2) // hello
}
1
2
3
4
5
6
7
比较两个字符串
区分大小写比较
func main() {
s1 := "hello"
s2 := "hello"
s3 := "HELLO"
println(s1 == s2) // true
println(s1 == s3) // false
}
1
2
3
4
5
6
7
直接通过 == 操作符进行区分大小写的字符串比较即可。
不区分大小写比较
使用 EqualFold(s, t string) bool 函数进行比较,两个参数为需要比较的两个字符串,返回值为布尔值,如果是 true 说明字符串相等,反之 false 则字符串不相等。
func main() {
s1 := "hello"
s2 := "hello"
s3 := "HELLO"
isEual := strings.EqualFold(s1, s2)
println(isEual) // true
isEual2 := strings.EqualFold(s1, s3)
println(isEual2) // true
}
1
2
3
4
5
6
7
8
9
字符串的替换
字符串替换的函数:Replace(s, old, new string, n int) string

第一个参数 s 为原字符串。
第二个参数 old 为需要替换的字符串。
第三个参数 new 为替换后的字符串。
第四个参数 n 为指定替换几个 old ,如果 n 小于 0,则替换全部。
返回值为替换后的新字符串。
案例:实现对敏感词的替换

func main() {
s1 := "我靠啊靠"
s2 := strings.Replace(s1, "靠", "*", 1)
println(s2) // true 我*啊靠
s3 := "我靠啊靠"
s4 := strings.Replace(s3, "靠", "*", -1)
println(s4) // true 我*啊*
}
1
2
3
4
5
6
7
8
第一次替换时,n 指定为 1,因此只替换了一个敏感词。
第二次替换时,n 指定为 -1,小于 0,因此将所有敏感词都替换了。

按照某个分割标识分割字符串
分割字符串的函数:Split(s, sep string) []string

第一个参数 s 为需要分割的字符串。
第二个参数 sep 为分割的标识。
返回值为字符串切片,保存被分割出来的子字符串。
import (
"fmt"
"strings"
)

func main() {
s1 := "golang-is-awesome"
strSlice := strings.Split(s1, "-")
fmt.Println(strSlice) // [golang is awesome]
}
1
2
3
4
5
6
7
8
9
10
去掉字符串左右两边的空格
函数:TrimSpace(s string) string

第一个参数 s 为需要去除空格的字符串。
返回值为去除空格后的新字符串。
import (
"strings"
)

func main() {
s1 := " golang is awesome "
s2 := strings.TrimSpace(s1)
println(s2) // "golang is awesome"
}
1
2
3
4
5
6
7
8
9
将字符串[左边]或[右边]或[左右两边]所指定的字符(串)去掉
将字符串[左右两边]所指定的字符(串)去掉
函数:Trim(s, cutset string) string

第一个参数 s 为需要去除指定字符的字符串。
第二个参数为指定的字符(串)。
import (
"strings"
)

func main() {
s1 := "-golang is awesome-"
s2 := strings.Trim(s1, "-")
println(s2) // "golang is awesome"
}
1
2
3
4
5
6
7
8
9
将字符串[左边]所指定的字符(串)去掉
函数:TrimLeft(s, cutset string) string

第一个参数 s 为需要去除指定字符的字符串。
第二个参数为指定的字符(串)。
import (
"strings"
)

func main() {
s1 := "-golang is awesome"
s2 := strings.TrimLeft(s1, "-")
println(s2) // "golang is awesome"
}
1
2
3
4
5
6
7
8
9
将字符串[右边]所指定的字符(串)去掉
函数:TrimRight(s, cutset string) string

第一个参数 s 为需要去除指定字符的字符串。
第二个参数为指定的字符(串)。
import (
"strings"
)

func main() {
s1 := "golang is awesome-"
s2 := strings.TrimRight(s1, "-")
println(s2) // "golang is awesome"
}
1
2
3
4
5
6
7
8
9
判断字符串是否以指定的字符串开头
函数:HasPrefix(s, prefix string) bool
- 第一个参数 s 为被判断字符串。
- 第二个参数 prefix 为指定的字符串。

import (
"strings"
)

func main() {
s1 := "hello world!"
flag := strings.HasPrefix(s1, "hello")
println(flag) // true
}
1
2
3
4
5
6
7
8
9
判断字符串是否以指定的字符串结束
函数:HasPrefix(s, prefix string) bool
- 第一个参数 s 为被判断字符串。
- 第二个参数 prefix 为指定的字符串。

import (
"strings"
)

func main() {
s1 := "hello world!"
flag := strings.HasSuffix(s1, "!")
println(flag) // true
}
1
2
3
4
5
6
7
8
9
将字符串切片中的元素以指定字符串连接生成新字符串
函数:Join(elems []string, sep string) string

第一个参数 elems 为字符串切片。
第二个参数 sep 为连接符。
返回值为新的字符串。
import (
"strings"
)

func main() {
strSlice := []string{"golang", "is", "awesome"}
s := strings.Join(strSlice, "-")
println(s) // golang-is-awesome
}
1
2
3
4
5
6
7
8
9
查找子串是否存在于指定的字符串中
函数: Contains(s, substr string) bool

第一个参数 s 为指定的字符串。
第二个参数 substr 为子串。
返回值为布尔值,如果是 true 说明存在,反之 false 则不存在。
import (
"strings"
)

func main() {
s := "golang is awesome"
isContains := strings.Contains(s, "golang")
println(isContains) // true
}
1
2
3
4
5
6
7
8
9
小结
本文先对 strings 标准库里的 Builder 变量进行介绍,使用其写入方法可以高效地拼接字符串,然后对 ToUpper、ToLower、Replace 等常用函数的参数和返回值以及用法进行介绍。
————————————————

标签:string,s2,s1,字符串,Go,println,strings,一文
From: https://www.cnblogs.com/liujiacai/p/17166435.html

相关文章

  • Go从入门到精通——在Go官方学习字符串的常见操作
    常见字符串操作https://pkg.go.dev/stringsGoVersion:1.20.1一、概要PackagestringsimplementssimplefunctionstomanipulateUTF-8encodedstrings.(Package......
  • 【转载】一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥
    说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA)、证书、数字签名、私钥、公钥、对称加密、非对称加密。这些到底有什么用呢,正所谓存在即合理,这篇......
  • VScode+Markdown+PicGo
    在Vscode上写Markdown代码,并且用PicGo上传图片。以下内容有Markdown插件OfficeViewer,所见即所得。注意此插件的编辑模式下不能使用PicGo扩展,只有VS的普......
  • Go从入门到精通——双引号、单引号字符串的区别
    双引号、单引号字符串的区别双引号:双引号括起来的字符串允许有转义字符。反引号:反引号扩起来的字符串称作"原始字符串",其中有转义字符的话不会进行转义,会被原样输出。......
  • 网站的三层架构--MVC和Django MVT
    1.MVC Model(数据模型):接收controller指令,读数据库数据并返回数据至controller。 View(视图):接收controller指令和数据,封装html、css、js,最后返回封装结果给controll......
  • .Net6 + GraphQL + MongoDb全局状态
    介绍文本说一下全局状态,这个东西还是比较有意思,他就像我们系统使用的时候业务中比如要拿当前用户ID、租户数据什么的。正文我们使用拦截器(Interceptor)来做一个Global......
  • .Net6 + GraphQL + MongoDb 实现GraphQL的认证和授权
    介绍文本说一下认证和授权,因为GraphQL的特殊性他不能直接使用微软提供的授权来做正文关于认证我这边没有自己写,我采用了okta提供的第三方认证服务,builder.Services.Add......
  • simpleui Django后台管理的使用
    一、介绍simpleui是djangoadmin的一个主题,是一个基于element-ui+vue开发,重写和优化90%以上的页面。与suit是同类产品。是一个更符合国人审美和使用习惯的一个主题。......
  • Golang微服务(三)
    Golang微服务(三)目录Golang微服务(三)分布式锁互斥锁悲观锁乐观锁基于Redis的分布式锁分布式锁gRPCservice层demorouterhandler如下:/*>>>modeltypeInventorystruc......
  • 一文深度解读音视频行业技术发展历程
    从1948年的香农定律,到音视频的今天。IMMENSE、36氪|作者北京时间2月28日凌晨,FIFA年度颁奖典礼在巴黎举行。梅西荣膺年度最佳球员,斯卡洛尼当选年度最佳男足主帅,马丁内斯荣......