脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页脚本专栏Golang→ Go语言strings

一文带你了解Go语言标准库strings的常用函数和方法

  更新时间:2022年11月30日 08:52:39  作者:陈明勇 
strings 库包含了许多高效的字符串常用操作的函数和方法,巧用这些函数与方法,能极大的提高我们程序的性能。本文就来和大家分享一下Go标准库strings的常用函数和方法,希望对大家有所帮助

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

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

第一个参数 s为需要去除指定字符的字符串。

第二个参数为指定的字符(串)。

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

函数:TrimLeft(s, cutset string) string

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

第一个参数 s为需要去除指定字符的字符串。

第二个参数为指定的字符(串)。

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

函数:TrimRight(s, cutset string) string

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

第一个参数 s为需要去除指定字符的字符串。

第二个参数为指定的字符(串)。

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

函数: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等常用函数的参数和返回值以及用法进行介绍。

到此这篇关于一文带你了解Go语言标准库strings的常用函数和方法的文章就介绍到这了,更多相关Go语言strings内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言zip文件的读写操作

    Go语言zip文件的读写操作

    本文主要介绍了Go语言zip文件的读写操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Golang HTTP编程的源码解析详解

    Golang HTTP编程的源码解析详解

    这篇文章主要为大家详细介绍了Golang中的HTTP编程以及源码解析,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
    2023-02-02
  • Go语言简介和环境配置

    Go语言简介和环境配置

    Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go= C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发,这篇文章主要介绍了Go介绍和环境配置,需要的朋友可以参考下
    2022-07-07
  • 在goland中读取tpl文件的图文操作

    在goland中读取tpl文件的图文操作

    这篇文章主要介绍了在goland中读取tpl文件的图文操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言中interface语法与使用详解

    Go语言中interface语法与使用详解

    Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,下面这篇文章主要给大家介绍了关于Go语言中interface语法与使用的相关资料,需要的朋友可以参考下
    2022-07-07
  • Golang设计模式之责任链模式讲解和代码示例

    Golang设计模式之责任链模式讲解和代码示例

    责任链是一种行为设计模式, 允许你将请求沿着处理者链进行发送, 直至其中一个处理者对其进行处理,本文就详细给大家介绍一下Golang 责任链模式,文中有详细的代码示例,需要的朋友可以参考下
    2023-06-06
  • Golang创建构造函数的方法超详细讲解

    Golang创建构造函数的方法超详细讲解

    构造器一般面向对象语言的典型特性,用于初始化变量。Go语言没有任何具体构造器,但我们能使用该特性去初始化变量。本文介绍不同类型构造器的差异及其应用场景
    2023-01-01
  • 用Go语言标准库实现Web服务之创建路由

    用Go语言标准库实现Web服务之创建路由

    在上一节中创建了项目,这篇文章主要介绍如何用Go语言标准库创建路由,文中有详细的代码示例,对大家的学习或工作有一定的帮助,感兴趣的同学可以参考下
    2023-05-05
  • golang线程安全的map实现

    golang线程安全的map实现

    这篇文章主要介绍了golang线程安全的map实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 使用IDEA配置GO语言的开发环境备忘录

    使用IDEA配置GO语言的开发环境备忘录

    最近在配置idea开发go语言时碰到很多问题,想着很多人都可能会遇到,所以下面这篇文章主要给大家介绍了关于使用IDEA配置GO语言的开发环境,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-05-05

最新评论