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

news2024/9/30 6:48:16

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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 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包还有很多方法,我们可以自己点一下看看
看源码,看这个函数如何使用
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2178964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3588主板PCB设计学习(一)

DCDC电路可以直接参考数据手册: 电源输出3A,回流GND也应该是3A,回流路径和输出路径的电流是一致的,不要输出路径布线很粗,GND回流路径很细,并且应该保证回流面积最小: 这一点讲的很到位&#xf…

《深度学习》OpenCV 指纹验证、识别

目录 一、指纹验证 1、什么是指纹验证 2、步骤 1)图像采集 2)图像预处理 3)特征提取 4)特征匹配 5)相似度比较 6)结果输出 二、案例实现 1、完整代码 2、实现结果 调试模式: 三、…

华为云LTS日志上报至观测云最佳实践

华为云LTS简介 华为云云日志服务(Log Tank Service,简称 LTS),用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、…

音乐项目总结(终)

总的来说写这个项目还是状态差了,前期中期写太慢,后期疯狂赶。 讲点对写这个项目能想起来解决的问题和写的的感触。 前期:当时觉得时间很充足,有布置算法题,我竟然还花三四天去学算法,,动态规划…

【软设】项目管理

【软设】项目管理 (要会根据Gantt和Pert图求关键路径,可以看3.3的示例来了解Pert图) 一.进度管理 进度管理 是项目管理的重要组成部分,旨在确保项目在规定的时间范围内完成。进度管理不仅包括项目活动的规划,还包括监控和控制项目活动的进…

LeetCode 热题 100 回顾8

干货分享,感谢您的阅读!原文见:LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 (简单) 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标…

Mixture-of-Experts (MoE): 条件计算的诞生与崛起【下篇】

将 Mixture-of-Experts 应用于 Transformers 既然我们已经研究了条件计算的早期工作,那么我们就可以看看 MoE 在变换器架构中的一些应用。 如今,基于 MoE 的 LLM 架构(如 Mixtral [13] 或 Grok)已广受欢迎,但 MoE 在语…

【C++题目】7.双指针_和为 s 的两个数字

文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: LCR 179.查找总价格为目标值的两个商品 题目描述: 解法 解法一(暴力解法,会超时) 两层 for 循环列出所有两个数字的组合…

网络通信(学习笔记)

InputStreamReader 是 Java 中的一个类,它可以将字节输入流转换为字符输入流。它可以读取字节输入流,并使用指定的字符集将字节解码为字符。 InputStreamReader继承了Reader类 Scanner scanner new Scanner(System.in);//这是一个控制台输入的一个类&am…

巡检机器人室内配电室应用

智能巡检系统实施背景 电力系统发展已进入电气化、自动化、智能化建设加速推进的新阶段,设备规模大幅增长,新设备、新技术加快应用,装备水平取得长足发展,与此同时设备规模大幅增长,新设备、新技术加快应用&#xff0…

JAVA并发编程高级——JDK 新增的原子操作类 LongAdder

LongAdder 简单介绍 前面讲过,AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,…

C++ | Leetcode C++题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int> &nums) {int ans 0;int n nums.size();vector<unordered_map<long long, int>> f(n);for (int i 0; i < n; i) {for (int j 0; j < i;…

蒂森电梯变频器维修CPIK40 CPIK32

维修范围&#xff1a; 1、通力电梯变频器维修&#xff1a;V3F16L,通力V3F18维修,电梯变频器V3F25维修,KDL16,KDL32维修&#xff0c;通力电梯CPU主板维修&#xff0c;806板&#xff0c;电梯安全回路板&#xff0c;LCECCB&#xff0c;LCECEB&#xff0c;电梯显示板维修&#xff…

Python编码系列—Python状态模式:轻松管理对象状态的变化

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录

概述 公司有个项目使用到Grafana作为监控界面,因为项目方的环境极其复杂,仅物理隔离的环境就有三四个,而且每个都得部署项目,今天在某个环境测试,查看界面遇到一个比较奇怪的Grafana问题,后面针对该问题进行跟踪分析并解决,故而博文记录,用于备忘。 问题 登录项目We…

CleanMyMac X v4.12.1 中文破解版 Mac优化清理工具

在数字时代&#xff0c;我们的Mac设备承载着越来越多的重要信息和日常任务。然而&#xff0c;随着时间的推移&#xff0c;这些设备可能会变得缓慢、混乱&#xff0c;甚至充满不必要的文件。这就是CleanMyMac X发挥作用的地方。 CleanMyMac X是一款功能强大的Mac优化工具&#…

Gson将对象转换为JSON(学习笔记)

JSON有两种表示结构&#xff0c;对象和数组。对象结构以"{"大括号开始&#xff0c;以"}"大括号结束。中间部分由0或多个以”&#xff0c;"分隔的”key(关键字)/value(值)"对构成&#xff0c;关键字和值之间以":"分隔&#xff0c;语法结…

C语言 | Leetcode C语言题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; #define HASH_FIND_LONG(head, findint, out) HASH_FIND(hh, head, findint, sizeof(long), out) #define HASH_ADD_LONG(head, intfield, add) HASH_ADD(hh, head, intfield, sizeof(long), add)struct HashTable {long key;int val;UT_ha…

LeetCode 热题 100 回顾20

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

数据结构串的kmp相关(求next和nextval)

傻瓜版&#xff0c;用来演示手算过程&#xff0c;个人理解用的&#xff0c;仅供参考。