Go 中的字符串操作:如何更新文本
字符串操作是軟件開發的基礎;畢竟,大多數編程語言都提供字符串類型。字符串是字符序列:字母、數字和符號。
字符串操作對於從文本處理和數據分析到 Web 開發的各種應用程序都很方便。流行的字符串操作操作是連接、數據驗證、提取和格式化。Go 在標準庫中提供了一個名為“strings”的字符串操作包。
字符串包
strings包為字符串操作和其他操作提供了各種有用的函數。該包包括子字符串操作、修剪、比較字符串、字符串轉換、字符串構建、拆分等功能。
您可以通過在導入列表中指定包名稱來導入字符串包。
import "strings"
搜索子字符串
strings包提供了三個用於搜索子字符串的函數:Contains函數、ContainsAny函數和ContainsRune函數。
Contains函數檢查指定的字符串是否包含子字符串。ContainsAny函數檢查字符串是否包含子字符串中的任何字符,ContainsRune函數檢查字符串是否包含符文(Unicode 字符)。
import (
"fmt"
"strings"
)
func main() {
aString: = "Hello, World!"
substring: = "World"
characters: = "aeiou"
aRune: = 'o'
fmt.Println(strings.Contains(aString, substring)) // Output: true
fmt.Println(strings.ContainsAny(aString, characters)) // Output: true
fmt.Println(strings.ContainsRune(aString, aRune)) // Output: true
}
您可以使用Index、IndexAny、IndexByte和IndexFunc函數檢索子字符串的索引。Index函數返回子字符串的索引,如果它出現在另一個給定的字符串中。IndexAny函數返回 Unicode 代碼點的第一個實例的索引,如果不存在任何字符,則返回-1。
import (
"fmt"
"strings"
)
func main() {
aString: = "Hello, world!"
substring: = "world"
chars: = "wrld"
byteCharacter: = byte('o')
aRune: = rune('o')
fmt.Println(strings.Index(aString, substring)) // Output: 7
fmt.Println(strings.IndexAny(aString, chars)) // Output: 7
fmt.Println(strings.IndexByte(aString, byteCharacter)) // Output: 4
f: = func(r rune) bool {
return r == 'o'
}
fmt.Println(strings.IndexFunc(aString, f)) // Output: 4
fmt.Println(strings.IndexRune(aString, aRune)) // Output: 4
}
IndexByte返回字節字符在字符串或-1中第一個實例的索引。IndexFunc函數將索引返回到滿足給定函數的第一個 Unicode 點的字符串中。最後,IndexRune函數返回符文的 Unicode 代碼點的第一個實例的索引。
在 Go 中替換子字符串
Replace和ReplaceAll函數有助於替換子字符串。Replace函數接受字符串、原始子字符串以及替換和多個替換。ReplaceAll函數只接受字符串、初始子字符串和替換。
import (
"fmt"
"strings"
)
func main() {
theString: = "This is a test string to be modified."
fmt.Println(strings.Replace(theString, "is", "was", 1))
fmt.Println(strings.Replace(theString, "is", "was", -1))
fmt.Println(strings.ReplaceAll(theString, "is", "was"))
}
請注意,您可以同時使用 Replace 和 ReplaceAll 來替換字符串中的每個匹配項。
拆分和連接字符串
strings包包含Split、SplitAfter、SplitAfterN和SplitN函數,用於拆分返回字符串片段的字符串。
Split方法按指定的分隔符拆分。與Split方法類似,SplitAfter方法拆分字符串,但它在其結果中包含分隔符。
import (
"fmt"
"strings"
)
func main() {
s: = "This is a test string to be split."
fmt.Println(strings.Split(s, ""))
fmt.Println(strings.SplitAfter(s, ""))
fmt.Println(strings.SplitAfterN(s, "", 3))
fmt.Println(strings.SplitN(s, "", 3))
}
SplitAfterN方法類似於SplitAfter函數,只是該函數將字符串拆分為指定的最大子字符串。SplitN方法將字符串拆分為指定的最大數量,而不包括子字符串中的分隔符。
您可以使用strings包中的Join函數連接字符串。Join函數接受一個切片和一個分隔符。
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Join([]string{"Hello", "World"}, ":"))
// Output: "Hello:World"
}
處理字符串大小寫
處理字符串大小寫對於許多任務都很方便,包括處理文檔。您可以使用ToLower函數進行小寫,使用ToUpper函數進行大寫,使用ToTitle函數進行標題大小寫。
import (
"fmt"
"strings"
)
func main() {
s: = "This is a test string."
fmt.Println(strings.ToLower(s)) // this is a test string.
fmt.Println(strings.ToUpper(s)) // THIS IS A TEST STRING.
fmt.Println(strings.ToTitle(s)) // THIS IS A TEST STRING.
}
Go 中的字符串構建
字符串構建器是一種允許在 Go 中進行高效連接的類型。bytes.Buffer類型是常用的字符串構建器之一。bytes.Buffer方法實現了一個可增長的字節緩衝區,具有用於操作的讀寫方法,允許高效的字符串追加而無需製作新副本,這與+操作和Join函數不同。
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
// Write some strings to the builder
b.WriteString("This ")
b.WriteString("is ")
b.WriteString("a ")
b.WriteString("test ")
b.WriteString("string.")
// Get the length of the builder
fmt.Println(b.Len())
// Convert the builder to a string
str: = b.String()
fmt.Println(str)
// Reset the builder
b.Reset()
// Write some more strings to the builder
b.WriteString("This ")
b.WriteString("is ")
b.WriteString("another ")
b.WriteString("test ")
b.WriteString("string.")
// Get the capacity of the builder
fmt.Println(b.Cap())
// Convert the builder to a string again
str = b.String()
fmt.Println(str)
}
main函數演示瞭如何使用strings.Builder類型進行高效的字符串構建。Strings.Builder類型的WriteString方法將字符串序列相互擴展,Len方法返回構建字符串的長度。
String方法將構建器的內容轉換為字符串,Reset方法重置構建器以進行額外的字符串構建。
Cap方法返回構建器的容量。這是 Go 為字符串分配的當前空間。
Go 中的字符串修剪
strings包還提供了在Trim、TrimLeft、TrimPrefix、TrimRight、TrimSpace和TrimSuffix函數中修剪字符串的功能。
import (
"strings"
"fmt"
)
func main() {
// the full string
s: = "Hello, World!"
// the element for the trim
prefix: = "Hello"
suffix: = "World!"
// trims a string by specified trim set
fmt.Println(strings.Trim(s, "!"))
// trims out by spaces in the beginning and end of the string
fmt.Println(strings.TrimSpace(s))
// trims from the left string by specified trim set
fmt.Println(strings.TrimLeft(s, "Hello"))
// trims out from the right string by specified trim set
fmt.Println(strings.TrimRight(s, "World!"))
// trims out a prefix
fmt.Println(strings.TrimPrefix(s, prefix))
// trims out a specific suffix
fmt.Println(strings.TrimSuffix(s, suffix))
}
主函數演示瞭如何使用這些函數進行修整。不同的函數以不同的方式修剪s字符串:
你可以在 Go 中格式化字符串
Go 標準庫還提供了用於字符串格式化的 fmt 包。fmt 包使用 C 風格的格式化動詞在 Go 中進行高效的字符串格式化。
發佈留言