天天看点

11.Go复合类型-字符串

11.Go复合类型-字符串

前言

上一章节,我们已经学习了切片,本章节来看看 字符串。

3:字符串

我们从文件中将数据读取出来以后,很多情况下并不是直接将数据打印出来,而是要做相应的处理。例如:去掉空格等一些特殊的符号,对一些内容进行替换等。

这里就涉及到对一些字符串的处理。在对字符串进行处理时,需要借助于包“strings”

下面讲解一下常用的字符串处理函数:

Contains

func Contains(s,substr string)bool
功能:字符串s中是否包含substr,返回bool值      

演示如下:

var str string = "hellogo"
fmt.Println(strings.Contains(str, "go")) // 返回值true
fmt.Println(strings.Contains(str, "abc")) // 返回值false      

Join

func Join(a[]string,sep string)string
功能:字符串链接,把slicea通过sep链接起来      

演示如下:

s := []string{"abc", "hello", "mike", "go"}
buf := strings.Join(s, "|")
fmt.Println("buf = ", buf)      

结果如下:

buf =  abc|hello|mike|go      

Index

func Index(s,sep string)int
功能:在字符串s中查找sep所在的位置,返回位置值,找不到返回-1      

示例:

fmt.Println(strings.Index("abcdhello", "hello")) // 返回位置4
fmt.Println(strings.Index("abcdhello", "go")) // 不包含子串,返回-1      

结果如下:

4
-1      

Repeat

func Repeat(s string,count int)string
功能:重复s字符串count次,最后返回重复的字符串      

演示如下:

buf := strings.Repeat("go", 3)
fmt.Println("buf = ", buf) //"gogogo"      

Replace

func Replace(s,old,new string,n int)string
功能:在s字符串中,把old字符串替换为new字符串,n表示替换的次数,小于0表示全部替换      

示例:

fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) // oinky oinky oink
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) // moo moo moo      

结果如下:

oinky oinky oink
moo moo moo      

Split

func Split(s,sep string)[]string
功能:把s字符串按照sep分割,返回slice      

示例:

buf := "hello@abc@go@mike"
s2 := strings.Split(buf, "@")
fmt.Println("s2 = ", s2)      

结果如下:

s2 =  [hello abc go mike]      

Trim

func Trim(s string,cutset string)string
功能:在s字符串的头部和尾部去除cutset指定的字符串      

示例:

buf := strings.Trim("       are u ok ?              ", " ") //去掉开头、结尾的空格
fmt.Printf("buf = #%s# \n", buf)      

结果如下:

buf = #are u ok ?#      

Fields

func Fields(s string) []string
功能:去除s字符串的空格符,并且按照空格分割返回slice      

示例:

s3 := strings.Fields("       are u ok ?              ")
for i,data := range s3{
   fmt.Println(i, ", ", data)
}      

结果如下:

0 ,  are
1 ,  u
2 ,  ok
3 ,  ?      

练习题

练习1:从日期字符串("2008-08-08")中分析出年、月、日;2008年08月08日。

让用户输入一个日期格式如:2008-01-02,你输出你输入的日期为2008年1月2日

var str string
fmt.Println("请输入出生日期,格式为:年-月-日")
fmt.Scan(&str)
s := strings.Split(str, "-") // 基于 - 分割字符串,拆分年月日
fmt.Println(s[0] + "年" + s[1] + "月" + s[2] + "日")      

执行如下:

请输入出生日期,格式为:年-月-日
2021-05-17
2021年05月17日      

练习2:从Email中提取出用户名和域名:[email protected]

var email string = "[email protected]"
s := strings.Split(email, "@") // 基于 @ 分割字符串
fmt.Println("用户名:" + s[0] + ", 域名:" + s[1])      

执行如下:

用户名:abc, 域名:163.com      

练习3:让用户输入一句话,判断这句话中有没有邪恶,如果有邪恶就替换成这种形式 然后输出,如:老王很邪恶,输出后变成老王很**

var str string
fmt.Println("请输入一句话:")
fmt.Scan(&str)
if strings.Contains(str, "邪恶") {
   str = strings.Replace(str, "邪恶", "**", -1)
}
fmt.Println(str)      

执行如下:

请输入一句话:
老王很邪恶
老王很**      

练习4:把{“诸葛亮”,”鸟叔”,”卡卡西”,”卡哇伊”} 变成  诸葛亮|鸟叔|卡卡西|卡哇伊,然后再把|切割掉

s := []string{"诸葛亮", "鸟叔", "卡卡西", "卡哇伊"}
buf := strings.Join(s, "|")
fmt.Println("buf = ", buf)
buf2 := strings.Split(buf, "|")
fmt.Println(buf2)      
buf =  诸葛亮|鸟叔|卡卡西|卡哇伊
[诸葛亮 鸟叔 卡卡西 卡哇伊]