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

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

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

我是陈明勇,本文分享的知识是 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
}
复制代码
  • 大写转小写
    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
}
复制代码

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

函数:HasSuffix(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 变量进行介绍,使用其写入方法可以高效地拼接字符串,然后对 ToUpperToLowerReplace 等常用函数的参数和返回值以及用法进行介绍。

目录
相关文章
|
5月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1116 103
|
4月前
|
Go C++
Go语言方法与接收者 -《Go语言实战指南》
本文介绍了 Go 语言中方法的相关概念和用法。方法是绑定到特定类型上的函数,包含值接收者和指针接收者两种形式。值接收者不会改变原始数据,而指针接收者可修改原始数据,且在处理大型结构体时性能更优。文章详细对比了方法与普通函数的区别,并说明了选择指针接收者的原因,如修改原始值、提升性能及保持一致性。此外,Go 支持为任意自定义类型定义方法,不仅限于结构体。最后通过表格总结了方法的核心概念和使用场景。
135 34
|
4月前
|
Go 调度
GO语言函数的内部运行机制分析
以上就是Go语言中函数的内部运行机制的概述,展示了函数在Go语言编程中如何发挥作用,以及Go如何使用简洁高效的设计,使得代码更简单,更有逻辑性,更易于理解和维护。尽管这些内容深入了一些底层的概念,但我希望通过这种方式,将这些理论知识更生动、更形象地带给你,让你在理解的同时找到编程的乐趣。
68 5
|
4月前
|
Go Python
函数的定义与调用 -《Go语言实战指南》
本文介绍了 Go 语言中函数的核心特性与用法,包括基本定义格式、调用方式、多返回值、返回值命名、参数类型简写、可变参数、高阶函数及匿名函数等内容。通过示例代码详细展示了如何定义和使用不同类型的函数,使读者能够全面了解 Go 函数的灵活性与强大功能。
|
6月前
|
Go 开发者
go-carbon v2.6.0 重大版本更新,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持
112 3
|
7月前
|
网络协议 Linux Go
用 Go 基于 epoll 实现一个最小化的IO库
Go 语言社区中存在多个异步网络框架,如 evio、nbio、gnet 和 netpoll 等。这些框架旨在解决标准库 netpoll 的低效问题,如一个连接占用一个 goroutine 导致的资源浪费。easyio 是一个最小化的 IO 框架,核心代码不超过 500 行,仅实现 Linux 下的 epoll 和 TCP 协议。它通过 Worker Pool、Buffer 等优化提高了性能,并提供了简单的事件处理机制。
|
10月前
|
JSON Go 开发者
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
208 4
|
10月前
|
Go 索引
go语言使用strings包
go语言使用strings包
208 3
|
存储 设计模式 Cloud Native
云原生系列Go语言篇-类型、方法和接口 Part 1
通过前面章节的学习,我们知道Go是一种静态类型语言,包含有内置类型和用户定义类型。和大部分现代编程语言一样,Go允许我们对类型关联方法。它也具备类型抽象,可以编写没有显式实现的方法。
145 0
|
存储 Cloud Native Java
云原生系列Go语言篇-类型、方法和接口 Part 2
虽然Go并发(在并发一章讲解)是聚光灯下的宠儿,便Go设计中真正的明星是其隐式接口,也是Go中唯一的抽象类型。下面就来学习它的伟大之处。
138 0