Go語言字符串處理庫strings包詳解

Golang字符串處理庫strings
在Go語言中,strings包是一個非常重要且功能豐富的標準庫,它提供了一系列用于操作字符串的函數(shù)。從基本的字符串查找、替換、分割到高級的比較、格式化等,strings包幾乎涵蓋了所有字符串處理的需求。
1. 導入strings包
在Go程序中,使用strings包之前需要先導入它。導入語句如下:
import “strings”
2. 字符串的查找
1. 判斷字符串是否包含子串
strings.Contains(s, substr string) bool 函數(shù)用于判斷字符串s是否包含子串substr,如果包含則返回true,否則返回false。
示例代碼:
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello, World!"
substr := "Hello"
fmt.Println(strings.Contains(str, substr)) // 輸出: true
}
2. 判斷某個字符串是否包含了多個字符串中的某一個
ContainsAny函數(shù)用于檢查字符串s是否包含字符串chars中的任何Unicode碼點。如果包含,則返回true;否則返回false。只要包含一個就返回true
str := "jingtian,大俠" fmt.Println(strings.ContainsAny(str, "z大")) 都不包含返回false fmt.Println(strings.ContainsAny(str, "z大"))

3. 字符串計數(shù)
Count(s, substr string) int 方法返回字符串s中包含子串substr的個數(shù)。
package main
import (
"fmt"
"strings"
)
func main() {
s := "hello world, world"
fmt.Println(strings.Count(s, "world")) // 輸出: 2
}4. 查找子串在字符串中第一次出現(xiàn)的位置
strings.Index(s, substr string) int函數(shù)用于查找子串substr在字符串s中首次出現(xiàn)的位置(索引從0開始),如果未找到則返回-1。
package main
import (
"fmt"
"strings"
)
func main() {
// 有兩個World,查出第一個World的第一個字母出現(xiàn)的位置
str := "Hello, World! World"
substr := "World"
index := strings.Index(str, substr)
fmt.Println(index) // 輸出: 7
}5. 查找子串最后一次出現(xiàn)的位置
strings.LastIndex(s, substr string) int函數(shù)與Index類似,但它查找的是子串substr在字符串s中最后一次出現(xiàn)的位置。
查的是字符串最后一次首字母出現(xiàn)的位置
示例代碼:
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello, Hello, World!"
substr := "Hello"
lastIndex := strings.LastIndex(str, substr)
fmt.Println(lastIndex) // 輸出: 7 查的是字符串最后一次首字母出現(xiàn)的位置
}6. 判斷字符串是否以指定前綴或后綴開頭/結尾
strings.HasPrefix(s, prefix string) bool和strings.HasSuffix(s, suffix string) bool函數(shù)分別用于判斷字符串s是否以指定的前綴prefix或后綴suffix開頭/結尾。
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello, World!"
fmt.Println(strings.HasPrefix(str, "Hello")) // 輸出: true
fmt.Println(strings.HasSuffix(str, "World!")) // 輸出: true
}7. 字符串的替換
替換字符串中的子串
strings.Replace(s, old, new string, n int) string函數(shù)用于將字符串s中的old子串替換為new子串,n表示替換的次數(shù)。如果n為小于0,則表示替換所有匹配的子串。
n必須寫,沒有默認值
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello, World!"
oldSubstr := "Hello"
newSubstr := "Hi"
newStr := strings.Replace(str, oldSubstr, newSubstr, 1)
fmt.Println(newStr) // 輸出: Hi, World!
// 替換所有匹配的子串
newStrAll := strings.Replace(str, "o", "a", -1)
fmt.Println(newStrAll) // 輸出: Hella, Warld!
}
ReplaceAll
從Go 1.12版本開始,strings包引入了ReplaceAll函數(shù),用于替換字符串s中所有的old子串為new。
func ReplaceAll(s, old, new string) string
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello, World! Hello, Go!"
newStr := strings.ReplaceAll(str, "Hello", "Hi")
fmt.Println(newStr) // 輸出: Hi, World! Hi, Go!
}8. 字符串的分割
將字符串分割成切片
strings.Split(s, sep string) []string函數(shù)用于將字符串s按照指定的分隔符sep進行分割,并返回一個字符串切片。
如果sep為空字符串,或者一個找不到的分隔符,則會將字符串s切分成單個字符的切片。
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello, World!"
sep := ", "
//以逗號空格作為切割符
strs := strings.Split(str, sep)
fmt.Println(strs) // 輸出: [Hello World!]
// 使用空字符串作為分隔符
strsEmpty := strings.Split(str, "")
fmt.Println(strsEmpty) // 輸出: [H e l l o , W o r l d !]
}
9. 字符串的連接
將切片中的字符串連接起來
strings.Join(a []string, sep string) string函數(shù)用于將字符串切片a中的字符串使用指定的分隔符sep連接起來,并返回連接后的字符串。
package main
import (
"fmt"
"strings"
)
func main() {
//字符串拼接,數(shù)組不能拼接,只能拼接切片
strs := []string{"Hello", "World!"}
sep := ", "
joinedStr := strings.Join(strs, sep)
fmt.Println(joinedStr) // 輸出: Hello, World!
}
10. 字符串比較
雖然strings包本身不直接提供字符串比較的函數(shù)(因為Go語言的==和!=操作符已經(jīng)足夠用于比較字符串),但了解如何比較字符串并理解其背后的機制是很重要的。特別是當涉及到比較時區(qū)分大小寫或不區(qū)分大小寫時。
- 區(qū)分大小寫比較:直接使用==和!=。
- 不區(qū)分大小寫比較:可以使用strings.EqualFold方法。
package main
import (
"fmt"
"strings"
)
func main() {
s1 := "Hello, Go!"
s2 := "hello, go!"
s3 := "Hello, Go!"
// 區(qū)分大小寫比較
fmt.Println(s1 == s2) // 輸出: false
fmt.Println(s1 == s3) // 輸出: true
// 不區(qū)分大小寫比較
fmt.Println(strings.EqualFold(s1, s2)) // 輸出: true
}
11. 字符串的大小寫轉換
strings.ToUpper(s string) string和strings.ToLower(s string) string函數(shù)分別用于將字符串s中的所有字符轉換為大寫或小寫。
package main
import (
"fmt"
"strings"
)
func main() {
str := "Hello, World!"
upperStr := strings.ToUpper(str)
lowerStr := strings.ToLower(str)
fmt.Println(upperStr) // 輸出: HELLO, WORLD!
fmt.Println(lowerStr) // 輸出: hello, world!
}12. 去除字符串首尾的空白字符
strings.TrimSpace(s string) string函數(shù)用于去除字符串s開頭和結尾的空白字符(如空格、換行符等)。
package main
import (
"fmt"
"strings"
)
func main() {
str := " Hello, World! "
trimmedStr := strings.TrimSpace(str)
fmt.Println(trimmedStr) // 輸出: Hello, World!
}
13. 去除字符串首尾指定的字符
strings.Trim(s, cutset string) string函數(shù)用于去除字符串s開頭和結尾由cutset指定的字符。
package main
import (
"fmt"
"strings"
)
func main() {
str := "!!!Hello, World!!!"
trimmedStr := strings.Trim(str, "! ")
fmt.Println(trimmedStr) // 輸出: Hello, World
}
14. 字符串的重復
Repeat(s string, count int) string方法將字符串s重復count次,并返回結果字符串。
package main
import (
"fmt"
"strings"
)
func main() {
s := "Go!"
repeated := strings.Repeat(s, 3)
fmt.Println(repeated) // 輸出: Go!Go!Go!
}
15. 字符串提取
可以通過字符串下標提取想要的字符串范圍,取單個得到的是uint8的ASIIC嗎數(shù)字,取多個得到的是字符串
str := "Hello, World! Hello, Go!"
fmt.Println(str[0:5]) //Hello
fmt.Printf("%T\n", str[0:5]) //string
fmt.Printf("%T\n", str[0]) //uint8
//單個字符可以通過string轉化為字符串
fmt.Println(string(str[0])) //H
strings包還有很多方法,我們可以自己點一下看看
看源碼,看這個函數(shù)如何使用

到此這篇關于Go語言字符串處理庫--strings的文章就介紹到這了,更多相關Go字符串處理庫strings內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Apache?IoTDB開發(fā)系統(tǒng)之Go原生接口方法
這篇文章主要為大家介紹了?Apache?IoTDB開發(fā)系統(tǒng)之Go原生接口方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
如何控制Go編碼JSON數(shù)據(jù)時的行為(問題及解決方案)
今天來聊一下我在Go中對數(shù)據(jù)進行 JSON 編碼時遇到次數(shù)最多的三個問題以及解決方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2020-02-02

