前言:
- 在字符串中 英文字符占1个字节, 中文字符占三个字节
- 字符串是由一个个字符组成的。字符 =>
byte
orrune
len
方法
- Go内置方法,可直接使用
- 对于字符串来说, len获取的是字符串中的字节数(而不是字符数)
- 对于切片来说, len获取的是元素的个数
当字符串中含有中文字符时, 我们如何获取其长度呢? 先转换为切片然后获取切片元素个数
package main
import (
"fmt"
)
// 当字符串中有中文字符时,获取其长度
str := "你好"
length := []rune(str)
fmt.Println (len (length)) // 2
转义符
转义: 将符号意义转为普通转为字符的特性
- 转义符:
- 字符串: ``
- 换行: rn
- 制表符: t
字符串比较
两个字符串是否相等条件: 字符串中的每个字符顺序和字母是否相等
两个字符串比较大小时: 每个字符依次按照ASCII码进行对比
字符串输出
- 控制台输出文本:
fmt.Println
- 格式化字符串动词(指定要插入到字符串中的值的格式):
fmt.Printf
、fmt.Sprintf
- %s: 插入字符串
- %d: 插入整数
- %f: 插入浮点数
- %t: 插入布尔型
- %v: 自动选择合适的格式
strings.Builder
是Go语言标准库的一个类型, 用于构建和操作数据库, 性能很高。
package main
import (
"fmt"
"strings"
)
func main() {
/**
strings.Builder
WriteString () // 用于将字符串追加到构建器中
String() 获取构建器中的最终字符串
*/
var stringBuilder strings.Builder
name := "Sun"
stringBuilder.WriteString("My name is ")
stringBuilder.WriteString(name)
res := stringBuilder.String()
fmt.Println(res)
}
strings包
strings包
提供了许多处理字符串的函数和方法strings.Contains
是否含有子字符串func Contains (s string, substr string) bool {}
substr:
子字符串strings.Count
子字符串中出现的个数func Count (s string, substr string) int {}
strings.Split
将字符串拆分为字符串切片func Split (s string, sep string) []string {}
strings.Index
查询子字符串在字符串中的位置若无返回-1
func Index (s string, substr string) int {}
strings.Replace
替换字符串中的指定字符串func Replace (s string, old string, new string, n int) string {}
n < 0时, 全部替换。strings.Trim ()
去掉字符串前后指定的字符func Trim (s string, cut string) string {]
strings.ToLower
字符串全部转为小写func ToLower (s string) string {}
strings.ToUpper
字符串全部转为大写strings.HasPrefix
检查字符串是否以指定前缀开头func HasPrefix (s string, prefix string) bool {}
strings.HasSuffix
检查字符串是否以指定后缀结尾func HasSuffix (s string, suffix string) bool {}
package main
import (
"fmt"
"strings"
)
func main() {
// strings.Split () 方法
str := "123-123-123-123"
res := strings.Split(str, "-")
fmt.Println(res) // [123 123 123 123]
}
package main
import (
"fmt"
"strings"
)
func main() {
// string.Index 查找子字符串中的位置
str := "Hello World"
res := strings.Index(str, "l")
fmt.Println(res) // 2
}
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello World"
res := strings.Replace(str, "llo", "oo", 1)
fmt.Println(res) // Heoo World
}
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello World"
res := strings.Trim(str, "d")
fmt.Println(res) // Hello Worl
}
Unicode
- 全称:
Universal Coded Character Set 即通用字符编码集
- 本质:
是一种字符编码标准
- 作用:
是为世界上所有已知的字符提供一个唯一的编号,以便不同的计算机和软件可以共享和处理文本数据,而不受字符集限制
补充: Unicode 编码标准包括了各种语言的字符,包括拉丁字母、希腊字母、汉字、日文假名、数学符号、标点符号等等。每个字符都有一个唯一的 Unicode 码点,它是一个用十六进制表示的数字. 例如字母 "A" 的 Unicode 码点是 U+0041,汉字 "你" 的 Unicode 码点是 U+4F60
UTF-8
- 全称:
Unicode Transformation Format - 8-bit, 即 Unicode 转换格式 - 8 位
- 作用:
将 Unicode 码点编码为字节序列的字符编码方案
注意: 在Go中 字符串是由Unicode码点组成的序列,UTF-8 编码方式将这些码点转换为字节,以便在计算机上进行存储和传输。你可以使用
for range 来遍历字符串,它会正确处理 UTF-8 编码的字符,并按字符遍历字符串,而不是字节。
for range
用来遍历有序的集合: 数组、字符串、切片、map、channell
- 遍历字符串: 遍历出来的是Unicodem码
element
和str[index]
区别
package main
import "fmt"
func main() {
str := "Sun你好"
for index, element := range str {
fmt.Println(index, element)
/**
0 83
1 117
2 110
3 20320
6 22909
*/
}
}
package main
import "fmt"
func main() {
str := "Sun你好"
for index, _ := range str {
fmt.Println(index, str[index])
/**
0 83
1 117
2 110
3 228
6 229
*/
}
}
goto语句(不推荐使用
)
- 含义:
goto语句用于无条件跳转到程序中的标签位置的控制流语句
- 用法:
goto label
goto 后面跟着一个标签名, 表示跳转到该标签的位置。 标签名是用户自定义的, 用以标识代码中的特定位置
package main
import "fmt"
func main() {
i := 0
start:
fmt.Println(i)
i++
if i < 5 {
goto start
}
}