Go语言字符串处理库strings包详解

 更新时间:2024年09月29日 14:23:48   作者:景天科技苑  
本文详细介绍了Go语言中的strings库的使用方法,包括字符串的查找、替换、分割、比较、大小写转换等操作,strings库是Go语言中非常重要且功能丰富的标准库,几乎涵盖了所有字符串处理的需求

Golang字符串处理库strings

在Go语言中,strings包是一个非常重要且功能丰富的标准库,它提供了一系列用于操作字符串的函数。从基本的字符串查找、替换、分割到高级的比较、格式化等,strings包几乎涵盖了所有字符串处理的需求。

1. 导入strings包

在Go程序中,使用strings包之前需要先导入它。导入语句如下:
import “strings”

2. 字符串的查找

1. 判断字符串是否包含子串

strings.Contains(s, substr string) bool 函数用于判断字符串s是否包含子串substr,如果包含则返回true,否则返回false。

示例代码:

package main
import (
    "fmt"
    "strings"
)
func main() {
    str := "Hello, World!"
    substr := "Hello"
    fmt.Println(strings.Contains(str, substr)) // 输出: true
}

2. 判断某个字符串是否包含了多个字符串中的某一个

ContainsAny函数用于检查字符串s是否包含字符串chars中的任何Unicode码点。如果包含,则返回true;否则返回false。只要包含一个就返回true

str := "jingtian,大侠"
fmt.Println(strings.ContainsAny(str, "z大"))
都不包含返回false
fmt.Println(strings.ContainsAny(str, "z大"))

3. 字符串计数

Count(s, substr string) int 方法返回字符串s中包含子串substr的个数。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    s := "hello world, world"  
    fmt.Println(strings.Count(s, "world")) // 输出: 2  
}

4. 查找子串在字符串中第一次出现的位置

strings.Index(s, substr string) int函数用于查找子串substr在字符串s中首次出现的位置(索引从0开始),如果未找到则返回-1。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    // 有两个World,查出第一个World的第一个字母出现的位置
    str := "Hello, World! World"  
    substr := "World"  
    index := strings.Index(str, substr)  
    fmt.Println(index) // 输出: 7  
}

5. 查找子串最后一次出现的位置

strings.LastIndex(s, substr string) int函数与Index类似,但它查找的是子串substr在字符串s中最后一次出现的位置。
查的是字符串最后一次首字母出现的位置

示例代码:

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := "Hello, Hello, World!"  
    substr := "Hello"  
    lastIndex := strings.LastIndex(str, substr)  
    fmt.Println(lastIndex) // 输出: 7   查的是字符串最后一次首字母出现的位置
}

6. 判断字符串是否以指定前缀或后缀开头/结尾

strings.HasPrefix(s, prefix string) bool和strings.HasSuffix(s, suffix string) bool函数分别用于判断字符串s是否以指定的前缀prefix或后缀suffix开头/结尾。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := "Hello, World!"  
    fmt.Println(strings.HasPrefix(str, "Hello")) // 输出: true  
    fmt.Println(strings.HasSuffix(str, "World!")) // 输出: true  
}

7. 字符串的替换

替换字符串中的子串
strings.Replace(s, old, new string, n int) string函数用于将字符串s中的old子串替换为new子串,n表示替换的次数。如果n为小于0,则表示替换所有匹配的子串。
n必须写,没有默认值

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := "Hello, World!"  
    oldSubstr := "Hello"  
    newSubstr := "Hi"  
    newStr := strings.Replace(str, oldSubstr, newSubstr, 1)  
    fmt.Println(newStr) // 输出: Hi, World!  
    // 替换所有匹配的子串  
    newStrAll := strings.Replace(str, "o", "a", -1)  
    fmt.Println(newStrAll) // 输出: Hella, Warld!  
}

ReplaceAll
从Go 1.12版本开始,strings包引入了ReplaceAll函数,用于替换字符串s中所有的old子串为new。
func ReplaceAll(s, old, new string) string

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := "Hello, World! Hello, Go!"  
    newStr := strings.ReplaceAll(str, "Hello", "Hi")  
    fmt.Println(newStr) // 输出: Hi, World! Hi, Go!  
}

8. 字符串的分割

将字符串分割成切片
strings.Split(s, sep string) []string函数用于将字符串s按照指定的分隔符sep进行分割,并返回一个字符串切片。
如果sep为空字符串,或者一个找不到的分隔符,则会将字符串s切分成单个字符的切片。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := "Hello, World!"  
    sep := ", "  
    //以逗号空格作为切割符
    strs := strings.Split(str, sep)  
    fmt.Println(strs) // 输出: [Hello World!]  
    // 使用空字符串作为分隔符  
    strsEmpty := strings.Split(str, "")  
    fmt.Println(strsEmpty) // 输出: [H e l l o ,   W o r l d !]  
}

9. 字符串的连接

将切片中的字符串连接起来
strings.Join(a []string, sep string) string函数用于将字符串切片a中的字符串使用指定的分隔符sep连接起来,并返回连接后的字符串。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    //字符串拼接,数组不能拼接,只能拼接切片
    strs := []string{"Hello", "World!"}  
    sep := ", "  
    joinedStr := strings.Join(strs, sep)  
    fmt.Println(joinedStr) // 输出: Hello, World!  
}

10. 字符串比较

虽然strings包本身不直接提供字符串比较的函数(因为Go语言的==和!=操作符已经足够用于比较字符串),但了解如何比较字符串并理解其背后的机制是很重要的。特别是当涉及到比较时区分大小写或不区分大小写时。

  • 区分大小写比较:直接使用==和!=。
  • 不区分大小写比较:可以使用strings.EqualFold方法。
package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    s1 := "Hello, Go!"  
    s2 := "hello, go!"  
    s3 := "Hello, Go!"  
    // 区分大小写比较  
    fmt.Println(s1 == s2) // 输出: false  
    fmt.Println(s1 == s3) // 输出: true  
    // 不区分大小写比较  
    fmt.Println(strings.EqualFold(s1, s2)) // 输出: true  
}

11. 字符串的大小写转换

strings.ToUpper(s string) string和strings.ToLower(s string) string函数分别用于将字符串s中的所有字符转换为大写或小写。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := "Hello, World!"  
    upperStr := strings.ToUpper(str)  
    lowerStr := strings.ToLower(str)  
    fmt.Println(upperStr) // 输出: HELLO, WORLD!  
    fmt.Println(lowerStr) // 输出: hello, world!  
}

12. 去除字符串首尾的空白字符

strings.TrimSpace(s string) string函数用于去除字符串s开头和结尾的空白字符(如空格、换行符等)。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := " Hello, World! "  
    trimmedStr := strings.TrimSpace(str)  
    fmt.Println(trimmedStr) // 输出: Hello, World!  
}

13. 去除字符串首尾指定的字符

strings.Trim(s, cutset string) string函数用于去除字符串s开头和结尾由cutset指定的字符。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    str := "!!!Hello, World!!!"  
    trimmedStr := strings.Trim(str, "! ")  
    fmt.Println(trimmedStr) // 输出: Hello, World  
}

14. 字符串的重复

Repeat(s string, count int) string方法将字符串s重复count次,并返回结果字符串。

package main  
import (  
    "fmt"  
    "strings"  
)  
func main() {  
    s := "Go!"  
    repeated := strings.Repeat(s, 3)  
    fmt.Println(repeated) // 输出: Go!Go!Go!  
}

15. 字符串提取

可以通过字符串下标提取想要的字符串范围,取单个得到的是uint8的ASIIC吗数字,取多个得到的是字符串

str := "Hello, World! Hello, Go!"
fmt.Println(str[0:5])        //Hello
fmt.Printf("%T\n", str[0:5]) //string
fmt.Printf("%T\n", str[0])   //uint8
//单个字符可以通过string转化为字符串
fmt.Println(string(str[0]))   //H

strings包还有很多方法,我们可以自己点一下看看
看源码,看这个函数如何使用

到此这篇关于Go语言字符串处理库--strings的文章就介绍到这了,更多相关Go字符串处理库strings内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go使用database/sql操作数据库的教程指南

    Go使用database/sql操作数据库的教程指南

    Go 语言中,有一个名为database/sql的标准库,提供了统一的编程接口,使开发人员能够以一种通用的方式与各种关系型数据库进行交互,本文就来和大家讲讲它的具体操作吧
    2023-06-06
  • go-zero过载保护源码解读

    go-zero过载保护源码解读

    这篇文章主要为大家介绍了go-zero过载保护源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 使用Golang获取音视频时长信息的示例代码

    使用Golang获取音视频时长信息的示例代码

    这篇文章主要介绍了如何使用Golang获取音视频时长信息,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • Go获取两个时间点时间差的具体实现

    Go获取两个时间点时间差的具体实现

    本文主要介绍了Go获取两个时间点时间差的具体实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • go语言检测文件是否存在的方法

    go语言检测文件是否存在的方法

    这篇文章主要介绍了go语言检测文件是否存在的方法,实例分析了Go语言文件操作的相关技巧,需要的朋友可以参考下
    2015-03-03
  • Golang中这些channel用法你了解吗

    Golang中这些channel用法你了解吗

    channel 是GO语言中一种特殊的类型,是连接并发goroutine的管道,这篇文章主要来和大家分享一下关于 nil channel 通道,有缓冲通道,无缓冲通道的常用方法以及巧妙使用的方式,希望对大家有所帮助
    2023-08-08
  • Golang自定义结构体转map的操作

    Golang自定义结构体转map的操作

    这篇文章主要介绍了Golang自定义结构体转map的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言zip文件的读写操作

    Go语言zip文件的读写操作

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

    Golang中unicode码和中文的互相转换函数使用

    这篇文章主要为大家介绍了Golang中unicode码和中文的互相转换函数使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Go语言中的值类型与引用类型的使用

    Go语言中的值类型与引用类型的使用

    Go语言中的数据类型可以分为值类型和引用类型,值类型包括基本和复合数据类型,特点是在传递时进行复制,保证数据的安全性,引用类型如slice、map等,传递的是引用副本,便于大型数据操作且提高性能,理解这些概念有助于编写更高效、安全的Go代码
    2024-09-09

最新评论