当前位置: 首页 > news >正文

【Golang】Go语言字符串处理库--strings

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Golang字符串处理库strings
    • 1. 导入strings包
    • 2. 字符串的查找
      • 1. 判断字符串是否包含子串
      • 2. 判断某个字符串是否包含了多个字符串中的某一个
    • 3. 字符串计数
    • 4. 查找子串在字符串中第一次出现的位置
    • 5. 查找子串最后一次出现的位置
    • 6. 判断字符串是否以指定前缀或后缀开头/结尾
    • 7. 字符串的替换
    • 8. 字符串的分割
    • 9. 字符串的连接
    • 10. 字符串比较
    • 11. 字符串的大小写转换
    • 12. 去除字符串首尾的空白字符
    • 13. 去除字符串首尾指定的字符
    • 14. 字符串的重复
    • 15. 字符串提取

Golang字符串处理库strings

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

1. 导入strings包

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

2. 字符串的查找

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

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

示例代码:

package mainimport ("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包还有很多方法,我们可以自己点一下看看
看源码,看这个函数如何使用
在这里插入图片描述

相关文章:

  • Apache Solr:深入探索与常见误区解析
  • Docker-2.如何保存数据退出
  • STL与PLY格式转化
  • 基于Spring Boot+Vue的减肥健康管理系统设计和实现【原创】(BMI算法,协同过滤算法、图形化分析)
  • Redis 介绍
  • 修复: Flux女生脸不再油光满面, 屁股下巴 -- 超实用Comfyui小技巧
  • css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis、::before的使用
  • Day28笔记-Python自动化操作Word
  • 优选驾考系统小程序的设计
  • 工作日志:ruoyi-vue-plus echarts根据窗口大小变化
  • 自己做个国庆75周年头像生成器
  • 基于微信小程序的美食推荐系统
  • 数据结构-栈(理解版)
  • 数据结构之链表(2),双向链表
  • C语言——动态内存分配
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【刷算法】求1+2+3+...+n
  • CSS 专业技巧
  • maven工程打包jar以及java jar命令的classpath使用
  • Node项目之评分系统(二)- 数据库设计
  • PAT A1120
  • php ci框架整合银盛支付
  • ViewService——一种保证客户端与服务端同步的方法
  • vue 个人积累(使用工具,组件)
  • 程序员最讨厌的9句话,你可有补充?
  • 你真的知道 == 和 equals 的区别吗?
  • 深入浏览器事件循环的本质
  • 通过几道题目学习二叉搜索树
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 写代码的正确姿势
  • 赢得Docker挑战最佳实践
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • #Linux(Source Insight安装及工程建立)
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (02)Unity使用在线AI大模型(调用Python)
  • (1)(1.11) SiK Radio v2(一)
  • (2)Java 简介
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (k8s)kubernetes集群基于Containerd部署
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十一)手动添加用户和文件的特殊权限
  • (转)Linux整合apache和tomcat构建Web服务器
  • (自用)仿写程序
  • .Net 6.0 Windows平台如何判断当前电脑是否联网
  • .Net6 Api Swagger配置
  • .net6使用Sejil可视化日志
  • .NET程序员迈向卓越的必由之路
  • .Net语言中的StringBuilder:入门到精通
  • @Autowired 与@Resource的区别
  • @JoinTable会自动删除关联表的数据