欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang?分割字符串的實(shí)現(xiàn)示例

 更新時(shí)間:2023年04月25日 09:28:34   作者:戀喵大鯉魚(yú)  
本文主要介紹了Golang?分割字符串的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在開(kāi)發(fā)過(guò)程中,很多時(shí)候我們有分割字符串的需求,即把一個(gè)字符串按照某種分割符進(jìn)行切割。

在 Go 語(yǔ)言中,分割字符串我們可以分為幾種情況,分別為:

  • 按空格分割
  • 按字符分割
  • 按字符串分割

下面分別講解使用 Golang 如何實(shí)現(xiàn)不同方式的字符串分割。

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)

可以指定一個(gè)字符串作為分隔符,可以指定單個(gè)字符作為分隔符,因?yàn)閱蝹€(gè)字符也是一個(gè)字符串。

示例:

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 將返回包含一個(gè)空串的切片。

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

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

3.按多個(gè)字符分割

標(biāo)準(zhǔn)庫(kù) strings 包中有一個(gè)函數(shù) FieldsFunc 可以指定多個(gè)字符為分隔符。

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.按多個(gè)字符串分割

截至 Go 1.20,標(biāo)準(zhǔn)庫(kù)暫未供支持多個(gè)字符串作為分隔符的分割函數(shù)。但是,我們可以基于 strings.Split 編寫一個(gè)函數(shù)來(lái)實(shí)現(xiàn)這個(gè)功能。

// 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.其他分割函數(shù)

除了文中提及的標(biāo)準(zhǔn)庫(kù)函數(shù),你可能還會(huì)用到下面這幾個(gè)函數(shù)來(lái)控制字符串的分割方式。

strings.SplitN

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

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

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

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

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

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

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

6.go-huge-util

借助 Golang 標(biāo)準(zhǔn)庫(kù)提供的相關(guān)函數(shù),分割字符串還是比較方便的。

文中提及的兩個(gè)函數(shù),已放置 Github 開(kāi)源工具庫(kù) go-huge-util,大家可使用 go mod 方式 import 然后使用。

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

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

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

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

參考文獻(xiàn)

strings - Go Packages
8 ways to split a string in Go (Golang) - GOSAMPLES
github.com/dablelv/go-huge-util

到此這篇關(guān)于Golang 分割字符串的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Golang 分割字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang打包配置文件的實(shí)現(xiàn)示例

    Golang打包配置文件的實(shí)現(xiàn)示例

    本文主要介紹了Golang打包配置文件的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 一篇文章讀懂Golang?init函數(shù)執(zhí)行順序

    一篇文章讀懂Golang?init函數(shù)執(zhí)行順序

    init()函數(shù)會(huì)在包被初始化后自動(dòng)執(zhí)行,并且在main()函數(shù)之前執(zhí)行,但是需要注意的是init()以及main()函數(shù)都是無(wú)法被顯式調(diào)用的,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)一篇文章讀懂Golang?init函數(shù)執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • go開(kāi)源項(xiàng)目用戶名密碼驗(yàn)證的邏輯鬼才寫法

    go開(kāi)源項(xiàng)目用戶名密碼驗(yàn)證的邏輯鬼才寫法

    這篇文章主要為大家介紹了go開(kāi)源項(xiàng)目中發(fā)現(xiàn)的一個(gè)邏輯鬼才寫法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Goland項(xiàng)目使用gomod配置的詳細(xì)步驟

    Goland項(xiàng)目使用gomod配置的詳細(xì)步驟

    Goland是一個(gè)用于Go語(yǔ)言開(kāi)發(fā)的IDE,Goland的項(xiàng)目結(jié)構(gòu)與Go語(yǔ)言的項(xiàng)目結(jié)構(gòu)相似,下面這篇文章主要給大家介紹了關(guān)于Goland項(xiàng)目使用gomod配置的詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Go 類型轉(zhuǎn)化工具庫(kù)cast函數(shù)詳解

    Go 類型轉(zhuǎn)化工具庫(kù)cast函數(shù)詳解

    這篇文章主要介紹了Go 類型轉(zhuǎn)化工具庫(kù)cast函數(shù)詳解,cast 是在Github上開(kāi)源的工具庫(kù),就像他的名字一樣,他為我們提供了非常便捷的類型轉(zhuǎn)化的方法
    2022-07-07
  • golang實(shí)現(xiàn)分頁(yè)算法實(shí)例代碼

    golang實(shí)現(xiàn)分頁(yè)算法實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于golang實(shí)現(xiàn)分頁(yè)算法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Go語(yǔ)言運(yùn)行環(huán)境安裝詳細(xì)教程

    Go語(yǔ)言運(yùn)行環(huán)境安裝詳細(xì)教程

    這篇文章主要介紹了Go語(yǔ)言運(yùn)行環(huán)境安裝詳細(xì)教程,本文講解了Linux、MAC OS、Windows下的安裝方法,同時(shí)講解了驗(yàn)證是否安裝成功、第三方工具安裝運(yùn)行環(huán)境的方法,需要的朋友可以參考下
    2014-10-10
  • 一文教你學(xué)會(huì)Go中singleflight的使用

    一文教你學(xué)會(huì)Go中singleflight的使用

    緩存在項(xiàng)目中使用應(yīng)該是非常頻繁的,提到緩存只要了解過(guò)?singleflight?,基本都會(huì)用于緩存實(shí)現(xiàn)的一部分吧,下面就跟隨小編一起來(lái)學(xué)習(xí)一下singleflight的使用吧
    2024-02-02
  • Go并發(fā)編程結(jié)構(gòu)體多字段原子操作示例詳解

    Go并發(fā)編程結(jié)構(gòu)體多字段原子操作示例詳解

    這篇文章主要為大家介紹了Go并發(fā)編程結(jié)構(gòu)體多字段原子操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語(yǔ)言底層原理互斥鎖的實(shí)現(xiàn)原理

    Go語(yǔ)言底層原理互斥鎖的實(shí)現(xiàn)原理

    這篇文章主要介紹了Go語(yǔ)言底層原理互斥鎖的實(shí)現(xiàn)原理,Go?sync包提供了兩種鎖類型,分別是互斥鎖sync.Mutex和讀寫互斥鎖sync.RWMutex,都屬于悲觀鎖,更多相關(guān)內(nèi)容需要的朋友可以查看下面文章內(nèi)容
    2022-08-08

最新評(píng)論