Go strings 系統(tǒng)包的使用說(shuō)明
前文我們有學(xué)習(xí)了 string 變量,發(fā)現(xiàn) Go 語(yǔ)言并沒(méi)有向面向?qū)ο笳Z(yǔ)言那樣,類型中自帶方法來(lái)處理對(duì)象的值。Go語(yǔ)言中也有類似的操作,其操作全都在 strings 系統(tǒng)包中實(shí)現(xiàn)了。本文主要來(lái)講解一下如何使用 strings 系統(tǒng)包比較常用的字符串操作。
1. 獲取字符串長(zhǎng)度
在往數(shù)據(jù)庫(kù)中寫(xiě)入數(shù)據(jù)的時(shí)候,數(shù)據(jù)庫(kù)字段通常都會(huì)有長(zhǎng)度限制,所以在寫(xiě)入之前最好事先判斷一下字符串的長(zhǎng)度是否符合自己的設(shè)計(jì)。
代碼示例:
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello Codey!"
fmt.Println(len(str))
fmt.Println(strings.Count(str, "")-1)
}
執(zhí)行結(jié)果:
其實(shí)獲取字符串長(zhǎng)度常用的是用 len()
函數(shù)去獲取,因?yàn)?sring 的本質(zhì)是一個(gè) rune 切片,所以 len()
對(duì) string 也是可以直接使用的。如果想要通過(guò) strings 包來(lái)獲取長(zhǎng)度,我們可以通過(guò) strings.Count(str,s string)int
來(lái)迂回達(dá)到目的,尋找字符串中的空字符串的個(gè)數(shù)就相當(dāng)于尋找字符之間的空隙(包括字符首尾),所以得到的數(shù)字就是長(zhǎng)度+1,我們得到結(jié)果后再減去1,就可以得到字符串的長(zhǎng)度了。
2. 比較字符串
在開(kāi)發(fā)大小寫(xiě)不敏感的應(yīng)用場(chǎng)景時(shí),比如說(shuō)地名的英文縮寫(xiě)。一般情況我們都將字符串轉(zhuǎn)換為大寫(xiě)或者小寫(xiě)再進(jìn)行比較。Go 語(yǔ)言中的 strings 包中專門(mén)提供了一個(gè)大小寫(xiě)不敏感的比較函數(shù)——strings.EqualFold(str1,str2 string)bool
。
代碼示例:
package main
import (
"fmt"
"strings"
)
func main() {
str1 := "Hello Codey!"
str2 := "heLLo coDEy!"
fmt.Println(strings.EqualFold(str1, str2))
}
執(zhí)行結(jié)果:
3. 字符串分割
Go 語(yǔ)言中也是可以支持根據(jù)特定字符串將字符串分割為字符串?dāng)?shù)組的操作。通過(guò)使用 strings.Split(s, sep string) []string
來(lái)實(shí)現(xiàn)
代碼示例:
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello Codey!"
fmt.Println(strings.Split(str, " "))//使用空格字符串去分割str
}
執(zhí)行結(jié)果:
4. 前后綴的判斷
在執(zhí)行文件操作的時(shí)候,經(jīng)常會(huì)用到的前后綴的操作,比如獲取日志文件的時(shí)候,獲取 .log 結(jié)尾,同時(shí)還要以2020 5 開(kāi)頭的文件,就需要判斷前后綴是否含有這些字符串,Go 語(yǔ)言的前綴判斷是使用 strings.HasPrefix(s, prefix string``)bool
,而后綴是使用 strings.HasSuffix(s, prefix string``)bool
。
代碼示例:
package main
import (
"fmt"
"strings"
)
func main() {
str := "2020_5_20.log"
fmt.Println(strings.HasPrefix(str, "2020_5_"))
fmt.Println(strings.HasSuffix(str, ".log"))
}
執(zhí)行結(jié)果:
5. 去除前后空格
在處理前端輸入的數(shù)據(jù)的時(shí)候,有時(shí)會(huì)需要去除前后空格。Go 語(yǔ)言中使用 strings.TrimSpace(s string)string
來(lái)執(zhí)行這個(gè)操作。
代碼示例:
package main
import (
"fmt"
"strings"
)
func main() {
str := " Hello Codey! "
fmt.Println(strings.TrimSpace(str))
}
執(zhí)行結(jié)果:
6. 將字符串?dāng)?shù)組拼接為字符串
Go 語(yǔ)言中使用 strings.Join(a ``[]string, ``sep string) string
來(lái)將字符串?dāng)?shù)組,根據(jù)你想要的字符串進(jìn)行拼接成為一個(gè)字符串。
代碼示例:
package main
import (
"fmt"
"strings"
)
func main() {
str := []string{"Hello", "Hi"}
fmt.Println(strings.Join(str, ","))//使用逗號(hào)拼接字符串
}
執(zhí)行結(jié)果:
7. 字符串替換
Go 語(yǔ)言中使用 strings.Replace(s, old, new string, n int) string
來(lái)進(jìn)行字符串替換,n<0 時(shí)替換字符串中左右舊字符子串。
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello Codey!"
fmt.Println(strings.Replace(str, "Hello", "Hi", -1))//將str中所有Hello替換為Hi
}
執(zhí)行結(jié)果:
8. 小結(jié)
本文主要介紹了 Go 語(yǔ)言的一個(gè)字符串操作包,這個(gè)包里面還有很多其它對(duì)字符串的操作,有興趣的讀者可以繼續(xù)研究。本文介紹的主要就是些開(kāi)發(fā)中常用的字符串操作,在我的開(kāi)發(fā)經(jīng)歷中還是字符串的分割和替換用的最多,大家要注意的是 Go 語(yǔ)言中的字符串是變量,并不是對(duì)象,每次修改完字符串其實(shí)都會(huì)使用一個(gè)新的內(nèi)存,所以在內(nèi)存不充足的場(chǎng)景要慎用字符串操作。