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