O、致谢
感谢宽哥的介绍和分享,让我逐渐入门go,帮助我打开了云原生开发领域的大门,著有《》、《》。如果大家有兴趣的话,可以多多了解一下宽哥。
感谢Go官网资料的无私分享
一、前言
在 Go 语言中,字符串处理是一个非常重要的方面,因为字符串在编程中扮演了关键的角色。字符串处理包括字符串的创建、连接、切割、查找、替换、转换等操作。
本文主要以下几方面介绍Go语言中字符串处理:
- 创建字符串
- 打印单行字符串和多行字符串
- 打印字符串长度
- 截取字符串
- 字符串大小写转换
- 查看字符串是否包含某个元素
- 忽略大小写比较字符串
- 判断某个元素在字符串中出现次数
- 根据分隔符分割字符串
- 拼接字符串
- 判断是否以某个字符开头或结尾
- 重复字符串
- 替换字符串
- 字符串修剪(去除前后的空格)
二、创建字符串
"
" "
将下面代码粘贴到01-StringProcessing-00.go文件中并保存该文件
package main
import "fmt"
func main() {
s1 := "\t\thello\n"
fmt.Println("双引号字符串输出的值:", s1)
s2 := `\t\thello\n`
fmt.Println("反引号字符串输出的值:", s2)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import "fmt"
importfmt
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
部分 3 - 主函数
s1 := "\t\thello\n"
fmt.Println("双引号字符串输出的值:", s1)
s2 := `\t\thello\n`
fmt.Println("反引号字符串输出的值:", s2)
fmt.Println()
s1\t\ns2\t\thello\n
运行上面代码
$ go run .\01-StringProcessing-00.go
双引号字符串输出的值: hello
反引号字符串输出的值: \t\thello\n
三、打印单行字符串和多行字符串
fmt.Println()fmt.Printf()
将下面代码粘贴到02-StringProcessing-00.go文件中并保存该文件
package main
import "fmt"
func main() {
// 打印单行字符串
singleLineStr := "This is a single-line string."
// 打印多行字符串
multiLineStr := `
This is a
multi-line
string.
`
fmt.Println("打印出单行字符串: ", singleLineStr)
fmt.Println("打印出多行字符串: ", multiLineStr)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import "fmt"
importfmt
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
部分 3 - 单行字符串示例
singleLineStr := "This is a single-line string."
singleLineStr
部分 4 - 多行字符串示例
multiLineStr := `
This is a
multi-line
string.
`
这部分代码使用了多行字符串字面量(反引号 ```),在这种形式下,字符串中的所有换行符和空格都会被保留。这样,多行字符串的内容就可以按照格式显示。
部分 5 - 使用fmt.Println()打印输出
fmt.Println("打印出单行字符串: ", singleLineStr)
fmt.Println("打印出多行字符串: ", multiLineStr)
fmt.Println()
运行上面代码
$ go run .\02-StringProcessing-00.go
打印出单行字符串: This is a single-line string.
打印出单行字符串:
This is a
multi-line
string.
四、打印字符串长度
len()
len()len()
length := len(someValue)
上面参数说明:
someValuelength
将下面代码粘贴到03-StringProcessing-00.go文件中并保存该文件
package main
import "fmt"
func main() {
str1 := "Hello"
// 打印字符串(纯字母)
str1length := len(str1)
fmt.Println("纯字母字符串的长度: ", str1length)
// 打印字符串(纯中文)
str2 := "中国"
str2length := len(str2)
fmt.Println("纯中文字符串的长度: ", str2length)
// 打印字符串(字母和中文混合)
str3 := "Hello,中国"
str3length := len(str3)
fmt.Println("字母和中文混合字符串的长度: ", str3length)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import "fmt"
importfmt
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
部分 3 - 计算纯字母字符串的长度
str1 := "Hello"
str1length := len(str1)
fmt.Println("纯字母字符串的长度: ", str1length)
str1len()str1
部分 4 - 计算纯中文字符串的长度
str2 := "中国"
str2length := len(str2)
fmt.Println("纯中文字符串的长度: ", str2length)
str2len()str2
部分 5 - 计算字母和中文混合字符串的长度
str3 := "Hello,中国"
str3length := len(str3)
fmt.Println("字母和中文混合字符串的长度: ", str3length)
str3len()str3
运行上面代码
go run .\03-StringProcessing-00.go
纯字母字符串的长度: 5
纯中文字符串的长度: 6
字母和中文混合字符串的长度: 12
五、截取字符串
[]
substring := str[startIndex:endIndex]
上面参数说明:
strstartIndexendIndexsubstring
substringstartIndexendIndex-1
将下面代码粘贴到04-StringProcessing-00.go文件中并保存该文件
package main
import "fmt"
func main() {
str := "Hello,World!"
substring := str[6:11]
fmt.Println("截取第7位到第11位的字符串:", substring)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import "fmt"
importfmt
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
部分 3 - 截取子串
str := "Hello,World!"
substring := str[6:11]
fmt.Println("截取第7位到第11位的字符串:", substring)
strstr[6:11]WdWd
运行上面代码
$ go run .\04-StringProcessing-00.go
截取第7位到第11位的字符串: World
六、字符串大小写转换
如果我们想实现字符串大小写,可以通过以下方式进行转换:
strings.ToUpper()strings.ToLower()strings.ToTitle()
使用切片操作获取字符串的子串,将下面代码粘贴到05-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello"
upperStr := strings.ToUpper(str)
lowerStr := strings.ToLower(str)
titleStr := strings.ToTitle(str)
fmt.Println("将所有字符串转换为大写后的值:", upperStr)
fmt.Println("将所有字符串转换为小写后的值:", lowerStr)
fmt.Println("将字符串转换为首字母大写后的值:", titleStr)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
部分 3 - 转换为大写、小写和首字母大写
str := "Hello"
upperStr := strings.ToUpper(str)
lowerStr := strings.ToLower(str)
titleStr := strings.ToTitle(str)
fmt.Println("将所有字符串转换为大写后的值:", upperStr)
fmt.Println("将所有字符串转换为小写后的值:", lowerStr)
fmt.Println("将字符串转换为首字母大写后的值:", titleStr)
strings
strings.ToUpper(str)strings.ToLower(str)strings.ToTitle(str)
运行上面代码
$ go run .\05-StringProcessing-00.go
将所有字符串转换为大写后的值: HELLO
将所有字符串转换为小写后的值: hello
将字符串转换为首字母大写后的值: HELLO
七、查看字符串是否包含某个元素
strings.Contains()strings.Contains()strings.Contains()
contains := strings.Contains(str, substr)
上面参数说明:
strsubstrcontains
使用切片操作获取字符串的子串,将下面代码粘贴到06-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "This is a test string."
// 使用Contains查看testtest的元素(完全匹配)
contains1 := strings.Contains(str, "testtest")
fmt.Println("查看字符串中是否包含testtest: ", contains1)
// 使用Contains查看testtest的元素(任意匹配其中一个元素即可)
contains2 := strings.ContainsAny(str, "testtest")
fmt.Println("查看字符串中是否包含testtest中的任意元素: ", contains2)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.Contains()
contains1 := strings.Contains(str, "testtest")
fmt.Println("查看字符串中是否包含 testtest: ", contains1)
strings.Contains()str"testtest"falsestr"testtest"
strings.ContainsAny()
contains2 := strings.ContainsAny(str, "testtest")
fmt.Println("查看字符串中是否包含 testtest 中的任意元素: ", contains2)
strings.ContainsAny()str"testtest"truestr"test"
运行上面代码
$ go run .\06-StringProcessing-00.go
查看字符串中是否包含testtest: false
查看字符串中是否包含testtest中的任意元素: true
八、忽略大小写比较字符串
strings.EqualFold()strings.EqualFold()strings.EqualFold()
equal := strings.EqualFold(str1, str2)
上面参数说明:
str1str2equal
将下面代码粘贴到07-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str1 := "Hello,Go!"
str2 := "hello,Go!"
equa1 := strings.EqualFold(str1, str2)
fmt.Println("两个字符串是否相等:", equa1)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.EqualFold()
str1 := "Hello,Go!"
str2 := "hello,Go!"
equal := strings.EqualFold(str1, str2)
fmt.Println("两个字符串是否相等:", equal)
strings.EqualFold()true
运行上面代码
$ go run .\07-StringProcessing-00.go
两个字符串是否相等: true
九、判断某个元素在字符串中出现次数
strings.Count()strings.Count()
count := strings.Count(str, substr)
上面参数说明:
strsubstrcount
将下面代码粘贴到08-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "banana"
count := strings.Count(str, "a")
fmt.Println("a元素在字符串str出现的次数:", count)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.Count()
str := "banana"
count := strings.Count(str, "a")
fmt.Println("a元素在字符串str出现的次数:", count)
strings.Count()stra元素在字符串str出现的次数: 3
运行上面代码
$ go run .\08-StringProcessing-00.go
a元素在字符串str出现的次数: 3
十、根据分隔符分割字符串
strings.Split()strings.Split()
parts := strings.Split(str, sep)
上面参数说明:
strsepparts
这里又分为两种情况:
- 保留分割符
- 不保留分割符
下面针对这两种情况分别进行举例说明:
例如,将字符串按逗号分隔为字符串切片(不保留分割符):
将下面代码粘贴到09-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "apple, banana, orange"
fruits := strings.Split(str, ",")
fmt.Println("不保留分割符分割后的结果:", fruits)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.Split()
str := "apple, banana, orange"
fruits := strings.Split(str, ",")
fmt.Println("不保留分割符分割后的结果:", fruits)
strings.Split()str,fruits
运行上面代码
$ go run .\09-StringProcessing-00.go
不保留分割符分割后的结果: [apple banana orange]
同时也可以在保留分割符的情况下,将字符串按逗号分隔为字符串切片:
将下面代码粘贴到09-StringProcessing-01.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "apple, banana, orange"
fruits := strings.SplitAfter(str, ",")
fmt.Println("保留分割符分割后的结果:", fruits)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要s入口点,所有的代码都将从这里开始执行。
strings.SplitAfter()
str := "apple, banana, orange"
fruits := strings.SplitAfter(str, ",")
fmt.Println("保留分割符分割后的结果:", fruits)
strings.SplitAfter()str,,
运行上面代码
$ go run .\09-StringProcessing-01.go
保留分割符分割后的结果: [apple, banana, orange]
十一、拼接字符串
在Go语言中,字符串运算通常涉及字符串的拼接、截取、查找、替换等操作。
+
将下面代码粘贴到10-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"reflect"
)
// 字符串运算-字符串拼接
func stringOperation(a, b string) {
fmt.Printf("a和b拼接的结果:%s\n", a+b)
ab := a + b
fmt.Printf("ab: %s,类型是:%s", ab, reflect.TypeOf(ab))
}
func main() {
stringOperation("1", "2")
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 包的导入
import (
"fmt"
"reflect"
)
导入了两个包:
fmtreflect
stringOperation
func stringOperation(a, b string) {
fmt.Printf("a和b拼接的结果:%s\n", a+b)
ab := a + b
fmt.Printf("ab: %s,类型是:%s", ab, reflect.TypeOf(ab))
}
stringOperationab
fmt.Printf%sa + babreflect.TypeOfabfmt.Printfab
main
func main() {
stringOperation("1", "2")
}
mainmainstringOperationstringOperation
运行上面代码
$ go run .\10-StringProcessing-00.go
a和b拼接的结果: 12
ab: 12,类型是:string
+
将下面代码粘贴到10-StringProcessing-01.go文件中并保存该文件
package main
import (
"fmt"
)
// fmt.Sprintf实现字符串拼接
func stringSprintf(firstName, secondName string) {
fullName := fmt.Sprintf("%s%s", secondName, firstName)
fmt.Println("你的全名是:", fullName)
}
func main() {
stringSprintf("q", "z")
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 包的导入
import (
"fmt"
)
fmt
stringOperation
func stringSprintf(firstName, secondName string) {
fullName := fmt.Sprintf("%s%s", secondName, firstName)
fmt.Println("你的全名是:", fullName)
}
stringSprintffirstNamesecondNamefmt.SprintffullNamefmt.Println
main
func main() {
stringSprintf("q", "z")
}
mainmainstringSprintfstringSprintf
运行上面代码
$ go run .\10-StringProcessing-01.go
你的全名是: zq
十二、判断是否以某个字符开头或结尾
12.1 判断字符串是否以指定前缀开头(区分大小写)
strings.HasPrefix()strings.HasPrefix()
startsWith := strings.HasPrefix(str, prefix)
上面参数说明:
strprefixstartsWith
strprefixstartsWithtruefalse
将下面代码粘贴到11-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello"
startsWith := strings.HasPrefix(str, "He")
fmt.Println("该字符串是否以He开头的:", startsWith)
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.HasPrefix()
str := "Hello"
startsWith := strings.HasPrefix(str, "He")
fmt.Println("该字符串是否以 He 开头的:", startsWith)
strings.HasPrefix()str"He"该字符串是否以 He 开头的: true
运行上面代码
$ go run .\11-StringProcessing-00.go
该字符串是否以He开头的: false
12.2 判断字符串是否以指定后缀结尾(区分大小写)
strings.HasSuffix()strings.HasSuffix()
hasSuffix := strings.HasSuffix(str, suffix)
上面参数说明:
strsuffixhasSuffix
strsuffixhasSuffixtruefalse
将下面代码粘贴到11-StringProcessing-01.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello"
startsWith := strings.HasSuffix(str, "lo")
fmt.Println("该字符串是否以lo结尾的:", startsWith)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.HasSuffix()
str := "Hello"
endsWith := strings.HasSuffix(str, "lo")
fmt.Println("该字符串是否以lo结尾的:", endsWith)
strings.HasSuffix()str"lo"该字符串是否以lo结尾的: true
运行上面代码
$ go run .\11-StringProcessing-01.go
该字符串是否以lo结尾的: true
十三、重复字符串
strings.Repeat()strings.Repeat()
repeatedStr := strings.Repeat(str, count)
上面参数说明:
strcountrepeatedStr
将下面代码粘贴到12-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "go"
repeatedStr := strings.Repeat(str, 3)
fmt.Println("重复生成的字符串:", repeatedStr)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.Repeat()
str := "go"
repeatedStr := strings.Repeat(str, 3)
fmt.Println("重复生成的字符串:", repeatedStr)
strings.Repeat()"go"repeatedStr重复生成的字符串: gogogo
运行上面代码
$ go run .\12-StringProcessing-00.go
重复生成的字符串: gogogo
十四、替换字符串
strings.Replace()strings.Replace()
newStr := strings.Replace(str, oldSubstr, newSubstr, n)
上面参数说明:
stroldSubstrnewSubstrnnewStr
strings.Replace()stroldSubstrnewSubstrnn
将下面代码粘贴到13-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello world!"
newStr := strings.Replace(str, "world", "go", 1)
fmt.Println("替换后的字符串:", newStr)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.Replace()
str := "Hello world!"
newStr := strings.Replace(str, "world", "go", 1)
fmt.Println("替换后的字符串:", newStr)
strings.Replace()str"world""go"替换后的字符串: Hello go!
运行上面代码
$ go run .\13-StringProcessing-00.go
替换后的字符串: Hello go!
十五、字符串修剪(去除前后的空格)
strings.TrimSpace()strings.TrimSpace()
trimmedStr := strings.TrimSpace(str)
上面参数说明:
strtrimmedStr
strings.TrimSpace()str
将下面代码粘贴到14-StringProcessing-00.go文件中并保存该文件
package main
import (
"fmt"
"strings"
)
func main() {
str := " abc "
trimmedStr := strings.TrimSpace(str)
fmt.Println("修剪后的字符串:", trimmedStr)
}
针对上面代码分为几个部分进行详细说明:
部分 1 - 导入包
import (
"fmt"
"strings"
)
importfmtstrings
部分 2 - 主函数
func main() {
// ...
}
这是程序的主要入口点,所有的代码都将从这里开始执行。
strings.TrimSpace()
str := " abc "
trimmedStr := strings.TrimSpace(str)
fmt.Println("修剪后的字符串:", trimmedStr)
strings.TrimSpace()strstr修剪后的字符串: abc
运行上面代码
$ go run .\14-StringProcessing-00.go
修剪后的字符串: abc