【GO语言卵细胞级别教程】06.GO语言的字符串操作
温馨提示:
本文中使用的项目模块均是 【05.项目创建和函数讲解】 中创建的,具体如何创建项目,请参考
【GO语言卵细胞级别教程】05.项目创建和函数讲解
演示项目仓库:https://gitee.com/gdzsfun/csdn-study-go 演示项目仓库
目录:
- 【GO语言卵细胞级别教程】06.GO语言的字符串操作
- 1.字符串函数
- 1.1 基本操作
- 1.2 字符串高级操作
1.字符串函数
1.1 基本操作
- 统计字符串的长度使用 len(str)
- 字符串遍历:因为中文和英文在utf8编码中占用字节不一样,所以遍历这里需要注意下
1. 方式1:当有中文的时候要注意可以使用range str
2. 方式2:可以使字符串转为切片再使用,防止出现中文的时候r := []rune(str), 然后再进行遍历即可 fot i:=0; i < len(r);i++{r[i]}
1. 方式3:直接遍历会出现乱码情况如果字符串中有中文的话for i:=0; i< len(str);i++{str[i]}
- 字符串转整数:strconv.Atoi(“66”) 返回两个值 result, err
- 整数转字符串: strconv.ItoA(888) 返回转换的结果
- 子串是否包含在指定的字符串中
strings.Contains("javajava", "ava") 返回的是bool
- 统计一个字符串有几个指定的子串
strings.Count("javajava", "ava") 返回个数
- 区分大小写比较字符串和不区分比较
1. 区分比较
str == "xxx"
2. 区分比较
strings.EqualFold("go", "GO")
- 返回子串在字符串第一次出现的索引值,如果没有返回默认值-1;
strings.Index("javajava", "ava") // 1
- 总结实战
package mystudy
// 字符串基础知识
import ("fmt""strconv""strings"
)func MyPrintln(str string){if str == ""{str = "myPrintln"}fmt.Println()fmt.Println("--------", str, "--------")
}func Zfc(){// 1.统计字符串的长度fmt.Println("1.统计字符串的长度")var str string = "新年好Happy"// 打印结果是14,因为一个英文字符utf8 占用8个字节,一个汉字占用3个字节fmt.Println("字符串:'新年好Happy:长度'", len(str))// 2.对字符串进行遍历fmt.Println("2.对字符串进行遍历")for i, value := range str {fmt.Println("Ascii 索引:", i, " 值:", value)fmt.Printf("中文索引:%d 值:%c\n", i, value)}// 2.对字符串的遍历,如果有中文会出现乱码情况,全英文的话可以使用这个方法进行打印fmt.Printf("直接遍历打印:")for i:=0;i < len(str); i++{fmt.Printf("%c", str[i])}MyPrintln("")// 2.使用切片方式遍历,可以直接打印出中文或者英文不乱码r := []rune(str)fmt.Println("切片方式r:", r)for i := 0 ; i < len(r); i++{fmt.Printf("%c", r[i])}MyPrintln("")// 3.整数转字符串var numInt int = 888888str2 := strconv.Itoa(numInt)fmt.Printf("str2=%v, str2 type=%T\n", str2, str2)// 4.字符串转整型 ASCII to Integer 缩写 Atoi,转换失败 err输出提示,numInt默认值0numInt, err := strconv.Atoi("89890i")fmt.Println(numInt, err)// 5.查找子串是否在指定的字符串中, 返回的是boolresult := strings.Contains("pythonjavacgoscalapython", "go")fmt.Println("查找子串是否在指定的字符串中:", result)MyPrintln("统计一个字符串有几个指定的字串")// 6.统计一个字符串有几个指定的字串subStrCount := strings.Count("pythonjavacgoscalapythongo", "go")fmt.Println("统计一个字符串有几个指定的字串:", subStrCount)// 7.不区分大小写字符串比较fmt.Println(strings.EqualFold("java", "JavA")) // true// 8.区分大小写字符串比较 fmt.Println("java" == "JavA") // false// 9.返回字符串第一次出现的索引值,没有的话返回默认值-1// strings.Index 是按照字节来统计下标的,所以当出现中文的时候下标和看到的字符串是不一样的fmt.Println(strings.Index("pythonjavacgoscalapythongo", "go"))fmt.Println(strings.Index("javajava", "ava"))fmt.Println(strings.Index(str, "年"))fmt.Printf("%c", str[strings.Index(str, "H")])}// 输出结果
1.统计字符串的长度
字符串:'新年好Happy:长度' 14
2.对字符串进行遍历
Ascii 索引: 0 值: 26032
中文索引:0 值:新
Ascii 索引: 3 值: 24180
中文索引:3 值:年
Ascii 索引: 6 值: 22909
中文索引:6 值:好
Ascii 索引: 9 值: 72
中文索引:9 值:H
Ascii 索引: 10 值: 97
中文索引:10 值:a
Ascii 索引: 11 值: 112
中文索引:11 值:p
Ascii 索引: 12 值: 112
中文索引:12 值:p
Ascii 索引: 13 值: 121
中文索引:13 值:y
直接遍历打印:æ°å¹´å¥½Happy
-------- myPrintln --------
切片方式r: [26032 24180 22909 72 97 112 112 121]
新年好Happy
-------- myPrintln --------
str2=888888, str2 type=string
0 strconv.Atoi: parsing "89890i": invalid syntax
查找子串是否在指定的字符串中: true-------- 统计一个字符串有几个指定的字串 --------
统计一个字符串有几个指定的字串: 2
true
false
11
1
3
H
1.2 字符串高级操作
- 字符串的替换:
result1 := strings.Replace(str1, “python”, “py”, n)
参数n 代表替换几个 -1 表示所有的,如果是1 那就是替换一个 2代表替换两次,从左至右
// 把str1字符串中的python替换为py 替换所有的
result1 := strings.Replace(str1, "python", "py", -1)
- 按照指定的某个字符串进行切割 strings.Split(str1, “xx”)
result2 := strings.Split(str1, "py")
- 字符串的字母进行大小写转换
小写 strings.ToLower(str1)
大写:strings.ToUpper(str1) - 左右空格去掉 strings.TrimSpace()
MyPrintln("5.字符串字母大小写转换")
str2 := " 新年好呀! 祝福您 万事如意 "
fmt.Println(str2)
fmt.Println(strings.TrimSpace(str2))
- 去掉左右两边的某个字符
strings.Trim("美国中国加油,中国加油美国", "美国")
- 去掉左边或者右边的某个字符串
fmt.Println(strings.TrimLeft("美国中国加油,中国加油美国", "美国"))
fmt.Println(strings.TrimRight("美国中国加油,中国加油美国", "美国"))
- 判断字符串是否以某个字符串开头
strings.HasPrefix("https://www.gdzs.com", "http")
- 判断字符串是否以某个字符串结尾
fmt.Println(strings.HasSuffix("https://www.gdzs.com", "com"))
- 总结
func Gstr(){MyPrintln("1.字符串高级操作")var str1 string = "javapythongoPythonjava你好python"// 1.字符串的替换 参数-1 代表替换几个 -1 表示所有的,如果是1 那就是替换一个result1 := strings.Replace(str1, "python", "py", -1)fmt.Println(result1)fmt.Println(strings.Replace(str1, "python", "py", 1))// 2.字符串分割; 返回一个字符串数组MyPrintln("2.字符串分割")result2 := strings.Split(str1, "py")fmt.Println(result2)for i, v := range result2 {fmt.Println(i, v)}// 4.字符串的字母进行大小写转换MyPrintln("4.字符串字母大小写转换")fmt.Println(strings.ToLower(str1))fmt.Println(strings.ToUpper(str1))// 5.左右空格去掉MyPrintln("5.字符串字母大小写转换")str2 := " 新年好呀! 祝福您 万事如意 "fmt.Println(str2)fmt.Println(strings.TrimSpace(str2))// 6.去掉左右两边的某个字符MyPrintln("6.去掉左右两边的某个字符")fmt.Println(strings.Trim("美国中国加油,中国加油美国", "美国"))// 7.去掉左边或者右边的某个字符串MyPrintln("7.去掉左边或者右边的某个字符串")fmt.Println(strings.TrimLeft("美国中国加油,中国加油美国", "美国"))fmt.Println(strings.TrimRight("美国中国加油,中国加油美国", "美国"))// 8.判断字符串是否以某个字符串开头MyPrintln("8.判断字符串是否以某个字符串开头")fmt.Println(strings.HasPrefix("https://www.gdzs.com", "http"))// 9.判断字符串是否以某个字符串结尾MyPrintln("8.判断字符串是否以某个字符串开头")fmt.Println(strings.HasSuffix("https://www.gdzs.com", "com"))
}