Go語言標準庫中對于字符串的操作很完善,以下簡單總結一下字符串的操作
一、字符串只能用雙引號定義
二、go里單引號和雙引號不通過,可以使用`` 號來定義原始輸出,不會進行轉義,相當于Python 里的三引號
package main
import "fmt"
func main() {
name := "楊彥星n"
s := `楊
adgfgfg
nt
`
fmt.Println(name,s)
}
輸出
楊彥星 楊 adgfgfg nt
三、字符串是不可改變的
我們說字符串是不可變的指的是字符串內部?用指針指向 UTF-8 字節數組,所指向的字節數組不能單獨改變。并不是指字符串指向一個新的UTF-8數組
package main
import "fmt"
func main() {
var name string
var name1 = []byte("yangyanxing漢字")
name = string(name1)
fmt.Println(&name,name)
name = "楊彥星" //這個是可以的
fmt.Println(&name) //name 的地址不會改變
//非法
//name[0] = "a"
}
如果想要改變字符串中的值需要先將字符串轉為字節數組([]byte)或者字符數組([]rune),有中文的情況下使用字符數組
package main
import "fmt"
func main() {
var name = "yangyanxing"
fmt.Println(&name,name)
names := []byte(name)
//字節數組需要使用單引號,雙引號是字符串了
names[0] = 'f'
fmt.Println(&name,string(names))
name = "楊彥星" //這個是可以的
//如果有漢字的話需要使用字符數組
namer := []rune(name)
//需要使用單引號
namer[0] = '飯'
//name 的地址不會改變
fmt.Println(&name,string(namer))
}
四、字符串與字節數組與字符數組的相互轉換
package main
import "fmt"
func main() {
var name = "yangyanxing"
fmt.Println(&name,name)
names := []byte(name)
fmt.Printf("%Tn",names)
names[0] = 'f' //字節數組需要使用單引號,雙引號是字符串了
name = string(names)
fmt.Println(&name,name)
name = "楊彥星"
//如果有漢字的話需要使用字符數組
namer := []rune(name)
fmt.Printf("%Tn",namer)
namer[0] = '飯'
name = string(namer)
fmt.Println(&name,name) //name 的地址不會改變
}
五、字符串的遍歷
字符串可以按字節或者字符來遍歷
package main
import "fmt"
func main() {
var name = "yang楊彥星"
//按字節遍歷
for i:=0;i<len(name);i++{
fmt.Printf("%v %T:%vn",i,name[i],name[i])
}
fmt.Println("")
//按字符遍歷
for _,r := range name{
//%c 為輸出數值所表示的 Unicode 字符,不帶單引號 如 y
//%q 輸出數值所表示的 Unicode 字符(帶單引號)如 '楊'
fmt.Printf("%c",r)
}
}
結果為
0 uint8:121 1 uint8:97 2 uint8:110 3 uint8:103 4 uint8:230 5 uint8:157 6 uint8:168 7 uint8:229 8 uint8:189 9 uint8:166 10 uint8:230 11 uint8:152 12 uint8:159 yang楊彥星 Process finished with exit code 0
六、字符串的拼接
可以直接使用 + 拼接
package main
import "fmt"
func main() {
//字符串可以使用+進行拼接
var name = "yang" + "yan" + "xing"
fmt.Println(name)
//使用+=在原字符串后面追加字符串
name += "楊彥星"
fmt.Println(name)
// + 不能在行首,只能寫在行尾,就和if else中的else那樣
s := "BeiJing" +
" TongZhou"
fmt.Println(s)
}
在循環中使用 + 號進行拼接并不是高效的方法,可以使用strings.Join方法
package main
import (
"fmt"
"strings"
)
func main() {
var names = []string{"yang","fan","zhang","li","chen"}
n := strings.Join(names," ")
fmt.Println(n)
s := "yang&aaa&bbb&ccc"
//以&分割
str := strings.Split(s,"&")
fmt.Println(str)
}
結果
yang fan zhang li chen [yang aaa bbb ccc]
strings包的常用方法
該包提供了字符串操作的常用方法
package main
import (
"fmt"
"strings"
)
func main() {
s := "yang& yan&xing"
//HasPrefix 判斷字符串 s 是否以 prefix 開頭
fmt.Println(strings.HasPrefix(s,"y"))
//HasSuffix 判斷字符串 s 是否以 suffix 結尾
fmt.Println(strings.HasSuffix(s,"aaa"))
//Contains 判斷字符串 s 是否包含 substr
fmt.Println(strings.Contains(s,"yang"))
//Replace替換字符串,最后一個參數為數量,-1為替換全部
fmt.Println(strings.Replace(s,"y","Y",-1))
//ToLower 將字符串中的 Unicode 字符全部轉換為相應的小寫字符
ss := "AAA楊彥星BbbbB"
fmt.Println(strings.ToLower(ss))
//ToUpper 將字符串中的 Unicode 字符全部轉換為相應的大寫字符
fmt.Println(strings.ToUpper(ss))
//strings.TrimSpace(s) 來剔除字符串開頭和結尾的空白符號
//中間的不能刪除
sp := " aaa bbb ccc "
fmt.Println(strings.TrimSpace(sp))
//還可以去除開頭或者結尾指定的字符
ssp := "aaa Hey, how are you George?aaaa"
fmt.Println(strings.TrimLeft(ssp,"He"))
fmt.Println(strings.TrimRight(ssp,"ge"))
fmt.Println(strings.Trim(ssp,"aaa"))
//strings.Fields(s) 將會利用
//strings.Split(s, sep) 用于自定義分割符號來對指定字符串進行分割
sp2 := " aa a b bb ccc "
fmt.Println(strings.Fields(sp2))
fmt.Println(strings.Split(sp2," ")) //使用空格分割
//Join 用于將元素類型為 string 的 slice 使用分割符號來拼接組成一個字符串
sp3 := []string{"aa","a","b","bb","ccc"}
fmt.Println(strings.Join(sp3,"%%%"))
}
結果
true false true Yang& Yan&xing aaa楊彥星bbbbb AAA楊彥星BBBBB aaa bbb ccc aaa Hey, how are you George?aaaa aaa Hey, how are you George?aaaa Hey, how are you George? [aa a b bb ccc] [ aa a b bb ccc ] aa%%%a%%%b%%%bb%%%ccc
字符串與其它類型的轉換
使用strconv包中的方法可以實現字符串與其它類型的轉換
package main
import (
"fmt"
"strconv"
)
func main() {
//Itoa 將數字轉為字符串
fmt.Println(strconv.Itoa(35))
// Atoi 將字符串轉為其它類型并不一定會成功
fmt.Println(strconv.Atoi("100"))
fmt.Println(strconv.ParseBool("true")) //可以成功
v,e := strconv.ParseBool("trues")//會有err
if e!=nil{
fmt.Println(e.Error())
}else{
fmt.Println(v)
}
}






