天天看點

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 =  諸葛亮|鳥叔|卡卡西|卡哇伊
[諸葛亮 鳥叔 卡卡西 卡哇伊]