網頁

2024/4/15

Golang 取得字串中指定字串後的子字串

Go取得一個字串中特定字串(含)後的子字串的方式如下。


例如下面取得字串foo/bar/bazbar/(含)之後的子字串。利用strings.Index找出特定字串首字的索引位置後,再從原字串該索引擷取到最後的子字串。

package main

import (
    "fmt"
    "strings"
)

func main() {
    str := "foo/bar/baz"
    subStr := str[strings.Index(str, "bar/"):]
    fmt.Println(subStr) // bar/baz
}

若子字串要不含特定字串,則strings.Index找到的索引再加上特定字串的長度即可。

package main

import (
    "fmt"
    "strings"
)

func main() {
    str := "foo/bar/baz"
    subStr := str[strings.Index(str, "bar/")+len("bar/"):]
    fmt.Println(subStr) // baz
}

下面的sub1sub2可擷取字串中特定字串後的子字串(未詳盡測試)。

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "foo/bar/baz/bar/qux"
    fmt.Println(sub1(s, "/bar", 2, true))  // /bar/qux
    fmt.Println(sub2(s, "/bar", 1, false)) // /baz/bar/qux
}

func sub1(s, subStr string, n int, isContain bool) string {
    if n <= 0 {
        return ""
    }
    for i := 1; i <= n; i++ {
        sliceIndex := strings.Index(s, subStr) + len(subStr)
        if sliceIndex > len(s) {
            return ""
        }
        s = s[sliceIndex:]
    }
    if isContain {
        s = subStr + s
    }

    return s
}

func sub2(s, subStr string, n int, isContain bool) string {
    ss := strings.SplitN(s, subStr, n+1)
    if len(ss) <= n {
        return ""
    }
    s = ss[n]
    if isContain {
        s = subStr + s
    }
    return s
}

沒有留言:

張貼留言