1、字符串(string)
1.1 什么是string
Go 中的字符串是一个字节的切片。可以通过将其内容封装在“”中来创建字符串。Go 中的字符串是 Unicode 兼容的,并且是 UTF-8 编码的。
示例代码:
package main
import (
"fmt"
)
func main() {
name := "Hello World"
fmt.Println(name)
}
1.2 string的使用
1.2.1 访问字符串中的单个字节
package main
import (
"fmt"
)
func main() {
name := "Hello World"
for i:= 0; i < len(s); i++ {
fmt.Printf("%d ", s[i])
}
fmt.Printf("\n")
for i:= 0; i < len(s); i++ {
fmt.Printf("%c ",s[i])
}
}
运行结果:
72 101 108 108 111 32 87 111 114 108 100
H e l l o W o r l d
2、练习及总结
2.1 Go 中的字符串是一个字节的切片
package main
import "fmt"
func main() {
/**
1. Go 中的字符串是一个字节的切片,可以通过将其内容封装在 “” 中来创建字符串,Go 中的字符串是 Unicode 兼容的,并且是 UTF-8 编码的
2. 字符串是一些字节的集合,理解为一个字符的序列,每个字符都是有固定的位置(索引,下标,index从0开始,到长度减1)
3,语法: "" ``
"雨林之后技术站" "yulinzhihou.com"
`雨林之后技术站` `yulinzhihou.com`
4、字符:对应编码表中的编码值
A -- 65
B -- 66
C -- 67
……
a -- 97
5、字节:byte -- uint8
utf8
*/
// 定义字符串
s1 := "雨林之后技术站"
fmt.Println("s1 = " + s1)
s2 := `yulinzhihou.com`
fmt.Println("s2 = " + s2)
// 2 定义字符串长度,返回的是字节的个数
fmt.Printf("len(s1) = %d\n", len(s1))
fmt.Printf("len(s2) = %d\n", len(s2))
// 3.获取某个字符
fmt.Printf("s1[4] : %v\n", s1[0])
fmt.Printf("s2[3] : %v\n", s2[3])
s3 := 'h'
s4 := 104
fmt.Printf("%c,%c,%c\n", s1[0], s3, s4) // 获取的是对应字符串的ascii值
// 字符串遍历
for index := 0; index < len(s1); index++ {
fmt.Printf("s1[%d] = %c\n", index, s1[index])
}
fmt.Println()
// for range 遍历
for key, value := range s1 {
fmt.Printf("s1[%d] == %c\n", key, value)
}
fmt.Println()
// 发现:for i 的这种遍历是直接遍历下标,不能正常打印中文,但 for range 的遍历 ,能正常遍历出中文,如果没有中文,则两者没有区别
// 字符串是字节的集合
slice1 := []byte{65, 66, 67, 68, 69}
slice2 := string(slice1) // 根据一个字节切片,构建字符串
fmt.Println(slice2)
s5 := "yulinzhihou"
slice3 := []byte(s5)
fmt.Println(slice3)
// 字符串不能通过slice下标进行修改
//s5[1] = "b"
//fmt.Println(s5)
}
2.2 strings 包下的关于字符串的函数
package main
import (
"fmt"
"strings"
)
func main() {
/*
strings 包下的关于字符串的函数
*/
string01 := "helloworld"
// 1,是否包含指定的内容
fmt.Println(strings.Contains(string01, "hello"))
// 2。是否包含chars中的任意字符即可
fmt.Println(strings.ContainsAny(string01, "chars"))
// 3.统计 substr 在 s 中出现的次数
fmt.Println(strings.Count(string01, "h"))
// 4,替换字符,不会修改原字符串
fmt.Println(strings.Replace(string01, "o", "a", -1))
fmt.Println(string01)
// 5.取字符所在位置
fmt.Println(strings.Index(string01, "o"))
// 6、截取字符串
fmt.Println(strings.Cut(string01, "w"))
// 7.拆散字符串
fmt.Println(strings.Split(string01, ""))
// 8,字符串转大写
fmt.Println(strings.ToUpper(string01))
// 以 XXX 前缀开头的,以 xxx 后缀结尾的
string02 := "20250408GO学习笔记.txt"
if strings.HasPrefix(string02, "20250408") {
fmt.Println("20250408GO学习笔记")
}
if strings.HasSuffix(string02, "txt") {
fmt.Println("文本文件")
}
// 切片转成字符串
slice01 := []string{"hello", "world", "test", "go"}
fmt.Println(strings.Join(slice01, "---"))
// 重复字符串并且拼接
string03 := strings.Repeat("yulinzhihou.com", 10)
fmt.Println(string03)
// 截取字符串
// substring(start,end) -- substr
// str[start:end] -- substr
string04 := string01[:5]
fmt.Println(string04)
string05 := string01[5:]
fmt.Println(string05)
string06 := string01[2:5]
fmt.Println(string06)
}
2.3 strconv 包:字符串和基本类型之前的转换
package main
import (
"fmt"
"strconv"
)
func main() {
/*
strconv包: 字符串和基本类型之间的转换
string convert
*/
// 1. bool 类型
string01 := "true"
bool1, err := strconv.ParseBool(string01)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("bool1 类型:%T\nbool1 的值为:%t\n", bool1, bool1)
fmt.Println()
// bool 类型转 string
ss1 := strconv.FormatBool(bool1)
fmt.Printf("ss1 的类型:%T\nss1 的值为:%s\n", ss1, ss1)
// 整数
string02 := "88888"
int1, err := strconv.ParseInt(string02, 10, 64)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("int1 的类型为:%T\nint1 的值为 %d\n", int1, int1)
//
ss2 := strconv.FormatInt(int1, 10)
fmt.Printf("ss2 的类型为%T\nss2 的值为:%s\n", ss2, ss2)
// itoa() atoi()
i3, err := strconv.Atoi("-888")
fmt.Printf("i3 的类型为 %T\ni3 的值为%d\n", i3, i3)
ss3 := strconv.Itoa(i3)
fmt.Printf("ss3 的类型为 %T\nss3 的值为%s\n", ss3, ss3)
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)