中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang怎么分割字符串

發布時間:2023-04-25 11:04:26 來源:億速云 閱讀:91 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Golang怎么分割字符串”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Golang怎么分割字符串”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1.按空格分割

ss := strings.Fields(s)

示例:

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Printf("Fields are: %q", strings.Fields("  foo bar  baz   "))
}

輸出:

Fields are: ["foo" "bar" "baz"]

2.按字符/字符串分割

ss := strings.Split(s, sep)

可以指定一個字符串作為分隔符,可以指定單個字符作為分隔符,因為單個字符也是一個字符串。

示例:

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Printf("%q\n", strings.Split("a,b,c", ","))
    fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
    fmt.Printf("%q\n", strings.Split(" xyz ", ""))
    fmt.Printf("%q\n", strings.Split("", ","))
}

輸出:

["a" "b" "c"]
["" "man " "plan " "canal panama"]
[" " "x" "y" "z" " "]
[""]

注意,如果待分割串為空串,strings.Split 將返回包含一個空串的切片。

如果希望返回 nil 切片,可以做一下封裝。

func Split(s, sep string) []string {
    if s == "" {
        return nil
    }
    return strings.Split(s, sep)
}

3.按多個字符分割

標準庫 strings 包中有一個函數 FieldsFunc 可以指定多個字符為分隔符。

ss := strings.FieldsFunc(s,f func(rune) bool)

示例:

package main

import (
    "fmt"
    "strings"
    "unicode"
)

func main() {
    f := func(c rune) bool {
        return !unicode.IsLetter(c) && !unicode.IsNumber(c)
    }
    fmt.Printf("Fields are: %q", strings.FieldsFunc("  foo1;bar2,baz3...", f))
}

輸出:

Fields are: ["foo1" "bar2" "baz3"]

4.按多個字符串分割

截至 Go 1.20,標準庫暫未供支持多個字符串作為分隔符的分割函數。但是,我們可以基于 strings.Split 編寫一個函數來實現這個功能。

// SplitSeps splits string into substring slice by multiple string separators.
// If you want to specify multiple string separators by regexp,
// please refer to `func (*Regexp) Split` in standard library regexp package.
func SplitSeps(s string, seps ...string) []string {
    if len(seps) == 0 {
        return []string{s}
    }

    result := strings.Split(s, seps[0])
    for _, sep := range seps[1:] {
        var temp []string
        for _, r := range result {
            temp = append(temp, strings.Split(r, sep)...)
        }
        result = temp
    }
    return result
}

示例:

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Printf("%q\n", SplitSeps("foo,bar,baz", []string{","}...))
    fmt.Printf("%q\n", SplitSeps("foo,bar|baz", []string{",", "|"}...))
    fmt.Printf("%q\n", SplitSeps("foo,bar|baz qux", []string{",", "|", " "}...))
    fmt.Printf("%q\n", SplitSeps("foo,bar|bazSEPqux", []string{",", "|", "SEP"}...))
    fmt.Printf("%q\n", SplitSeps("foo,bar|baz", []string{}...))
    fmt.Printf("%q\n", SplitSeps(" xyz", []string{""}...))
}

輸出:

["foo" "bar" "baz"]
["foo" "bar" "baz"]
["foo" "bar" "baz" "qux"]
["foo" "bar" "baz" "qux"]
["foo,bar|baz"]
[" " "x" "y" "z"]

5.其他分割函數

除了文中提及的標準庫函數,你可能還會用到下面這幾個函數來控制字符串的分割方式。

strings.SplitN

func strings.SplitN(s, sep string, n int) []string

該函數與 Split 函數類似,但是可以指定分割后的最大子字符串個數 n,如果 n 為正數,則最多分割成 n 個子字符串;如果 n 為負數,則不限制子字符串個數。例如:

str := "hello,world,how,are,you"
words := strings.SplitN(str, ",", 2)
fmt.Println(words) // ["hello", "world,how,are,you"]

strings.SplitAfter

func SplitAfter(s, sep string) []string

該函數將字符串 s 按照分割符 sep 分割成多個子字符串,并返回一個字符串切片。不同于 Split 函數的是,SplitAfter 函數會在分割符之后分割,例如:

str := "hello,world,how,are,you"
words := strings.SplitAfter(str, ",")
fmt.Println(words) // ["hello,", "world,", "how,", "are,", "you"]

strings.SplitAfterN

func SplitAfterN(s, sep string, n int) []string

該函數與 SplitAfter 函數類似,但是可以指定分割后的最大子字符串個數 n。如果 n 為負數,則不限制子字符串個數。例如:

str := "hello,world,how,are,you"
words := strings.SplitAfterN(str, ",", 2)
fmt.Println(words) // ["hello,", "world,how,are,you"]

6.go-huge-util

借助 Golang 標準庫提供的相關函數,分割字符串還是比較方便的。

文中提及的兩個函數,已放置 Github 開源工具庫 go-huge-util,大家可使用 go mod 方式 import 然后使用。

import "github.com/dablelv/go-huge-util/str"

// Split 如果待分割串為空串,返回 nil 切片而非包含一個空串的切片。
str.Split(s, sep string) []string

// SplitSeps 通過多個字符串分隔符將字符串分割為字符串切片。
str.SplitSeps(s string, seps []string) []string

go-huge-util 除了類型轉換,還有很多其他實用函數,如加解密、zip 解壓縮等,歡迎大家使用、Star、Issue 和 Pull Request。

讀到這里,這篇“Golang怎么分割字符串”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西藏| 汾西县| 潍坊市| 镇康县| 横山县| 伊宁县| 蒙自县| 陆丰市| 汤原县| 扶绥县| 河曲县| 张家界市| 敖汉旗| 揭阳市| 屏东市| 桐梓县| 衡水市| 平遥县| 平湖市| 涪陵区| 泸州市| 孟津县| 岚皋县| 三穗县| 成都市| 安义县| 义乌市| 张北县| 米林县| 兴山县| 黎城县| 延长县| 南昌县| 游戏| 确山县| 霍州市| 田阳县| 鄂伦春自治旗| 登封市| 巧家县| 江达县|