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

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

时间:2022-11-29 23:32:09浏览次数:39  
标签:string s2 s1 字符串 Go println strings 一文


耐心和持久胜过激烈和狂热。

哈喽大家好,我是陈明勇,今天分享的知识是 Go 标准库 —— ​​strings​​ 常用函数和方法。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

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!
}

​strings.Builder​​ 底层是通过其内部的 ​​slice​​ 来储存内容的。当调用其相关的写入方法(如 ​​WriteString​​ )的时,新的字节数据就会被追加到 ​​slice​​ 上。相比普通字符串的多次拼接,减少了拼接时需要创建新字符串的内存开销。

大小写转换

  • 小写转大写

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

import "strings"

func main() {
s1 := "hello"
s2 := strings.ToUpper(s1)
println(s2) // HELLO
}
  • ToUpper(s string) string 函数的作用是,
  • 大写转小写

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

import "strings"

func main() {
s1 := "HELLO"
s2 := strings.ToLower(s1)
println(s2) // hello
}

比较两个字符串

  • 区分大小写比较
func main() {
s1 := "hello"
s2 := "hello"
s3 := "HELLO"
println(s1 == s2) // true
println(s1 == s3) // false
}

直接通过 ​​==​​ 操作符进行区分大小写的字符串比较即可。

  • 不区分大小写比较 使用 ​​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
}

字符串的替换

字符串替换的函数:​​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 我*啊*
}

第一次替换时,​​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]
}

去掉字符串左右两边的空格

函数:​​TrimSpace(s string) string​

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

func main() {
s1 := " golang is awesome "
s2 := strings.TrimSpace(s1)
println(s2) // "golang is awesome"
}

将字符串[左边]或[右边]或[左右两边]所指定的字符(串)去掉

  • 将字符串[左右两边]所指定的字符(串)去掉 函数:Trim(s, cutset string) string
  • 第一个参数 ​​s​​ 为需要去除指定字符的字符串。
  • 第二个参数为指定的字符(串)。
import (
"strings"
)

func main() {
s1 := "-golang is awesome-"
s2 := strings.Trim(s1, "-")
println(s2) // "golang is awesome"
}
  • 将字符串[左边]所指定的字符(串)去掉 函数:TrimLeft(s, cutset string) string
  • 第一个参数 ​​s​​ 为需要去除指定字符的字符串。
  • 第二个参数为指定的字符(串)。
import (
"strings"
)

func main() {
s1 := "-golang is awesome"
s2 := strings.TrimLeft(s1, "-")
println(s2) // "golang is awesome"
}
  • 将字符串[右边]所指定的字符(串)去掉 函数:TrimRight(s, cutset string) string
  • 第一个参数 ​​s​​ 为需要去除指定字符的字符串。
  • 第二个参数为指定的字符(串)。
import (
"strings"
)

func main() {
s1 := "golang is awesome-"
s2 := strings.TrimRight(s1, "-")
println(s2) // "golang is awesome"
}

判断字符串是否以指定的字符串开头

函数:​​HasPrefix(s, prefix string) bool​

  • 第一个参数​​s​​​为被判断字符串。
  • 第二个参数 ​​prefix​​ 为指定的字符串。
import (
"strings"
)

func main() {
s1 := "hello world!"
flag := strings.HasPrefix(s1, "hello")
println(flag) // true
}

判断字符串是否以指定的字符串结束

函数:​​HasPrefix(s, prefix string) bool​​​

  • 第一个参数​​s​​为被判断字符串。
  • 第二个参数​​prefix​​为指定的字符串。
import (
"strings"
)

func main() {
s1 := "hello world!"
flag := strings.HasSuffix(s1, "!")
println(flag) // true
}

将字符串切片中的元素以指定字符串连接生成新字符串

函数:​​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
}

查找子串是否存在于指定的字符串中

函数:​​ 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
}

小结

本文先对 strings 标准库里的 ​​Builder​​​ 变量进行介绍,使用其写入方法可以高效地拼接字符串,然后对 ​​ToUpper​​​、​​ToLower​​​、​​Replace​​ 等常用函数的参数和返回值以及用法进行介绍。

标签:string,s2,s1,字符串,Go,println,strings,一文
From: https://blog.51cto.com/u_15878295/5897271

相关文章

  • 「Goravel 上新」用户授权模块,让你简单的对非法用户 Say No!
    首先,让我们定义一个规则:用户只能访问自己创建的文章。facades.Gate.Define("update-post",func(ctxcontext.Context,argumentsmap[string]any)*access.Response{u......
  • win10 git报错:Unable to negotiate with port: no matching host key type found. The
    现象已经生成id_rsa的密钥,并且在git上进行了配置。但是用gitclone失败。报错:Unabletonegotiatewithport:nomatchinghostkeytypefound.Theiroffer:ssh-rsa。......
  • 【转载】Django models常用字段类型
    models常用字段类型原文模型中的每一个字段都应该是某个Field类的实例,字段类型具有下面的作用:决定数据表中对应列的数据类型(例如:INTEGER,VARCHAR,TEXT)HTML中对......
  • [django]sqlserver配置
    python3.8.8安装mssql-djangopipinstallmssql-djangopiplistPackageVersion-------------------asgiref3.5.2Django3.2.16mssql-django1......
  • go环境搭建及tjfoc-gm安装
    go包安装下载go安装包我预安装的为64位linux安装包随后进入/usr/local文件夹cd/usr/local使用以下指令进行下载go安装包wgethttps://dl.google.com/go/go1.19.3.li......
  • DRF-Django Rest frameWork脉络笔记
    1.Web应用模式在开发Web应用中,有两种应用模式:前后端不分离前后端分离2.api接口为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接......
  • Python后端开发(主Django)面试题
    最近两个后端同事离职了,帮忙面试了些后端开发的实习生,虽然有过一些后端经验,但我不是主要写后端的,复习了下Django也稍微准备了一些主要是Django相关的面试题,数据库相关部分额......
  • Node.js操作MongoDB根据日期Date查询数据
    背景MongoDB里,日期Date类型数据使用的是ISODate,是GMT(格林尼治标准时)时间,而我们处在东八区(比标准时间多8个小时),所以实际转换的时候程序里的时间应该是GMT+8,转换到MongoDB......
  • Django-6.第三方-笔记
    第三方本次课程中主要介绍一些常用的第三方Django模块,包括:富文本编辑器全文检索发送邮件celery布署当项目开发完成后,需要将代码放到服务器上,这个过程称为布署,服务器上需要有......
  • Django-6.1富文本编辑器-笔记
    富文本编辑器借助富文本编辑器,网站的编辑人员能够像使用offfice一样编写出漂亮的、所见即所得的页面。此处以tinymce为例,其它富文本编辑器的使用也是类似的。在虚拟环境中安......