Go 中的字符串操作:如何更新文本

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
}

您可以使用IndexIndexAnyIndexByteIndexFunc函數檢索子字符串的索引。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 中替換子字符串

ReplaceReplaceAll函數有助於替換子字符串。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 來替換字符串中的每個匹配項。

Go替換操作的結果

拆分和連接字符串

strings包包含SplitSplitAfterSplitAfterNSplitN函數,用於拆分返回字符串片段的字符串。

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包還提供了在TrimTrimLeftTrimPrefixTrimRightTrimSpaceTrimSuffix函數中修剪字符串的功能。

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 中進行高效的字符串格式化。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *