如何替换Go中的第n次出现

如何替换Go中的第n次出现,go,replace,slice,Go,Replace,Slice,如何替换func函数(s,旧的,新的[]字节,n int)[]字节,给定三个 字节片s、old、new和整数n返回与s对应的片,其中 第n次出现的旧的替换为新的。如果不存在这种情况, 函数返回s而不更改它?谢谢 import ( "fmt" "os" "strconv" ) func main() { s := os.Args[1] old := os.Args[2] new := os.Args[3] n, _ := strconv

如何替换func函数(s,旧的,新的[]字节,n int)[]字节,给定三个 字节片s、old、new和整数n返回与s对应的片,其中 第n次出现的旧的替换为新的。如果不存在这种情况, 函数返回s而不更改它?谢谢


import (

    "fmt"
    "os"
    "strconv"
)

func main() {
    s := os.Args[1]
    old := os.Args[2]
    new := os.Args[3]
    n, _ := strconv.Atoi(os.Args[4])
    fmt.Println(s)
    replaced := replace([]byte(s), []byte(old), []byte(new), n)
    fmt.Println(string(replaced))
}

func replace(s, old, new []byte, i int) (replaced []byte) {

}```

您可以尝试使用组合
bytes.SplitAfter
,该组合将在片段的N元素上使用分隔符(
bytes.Replace()
)分割原始字符串,然后使用组合
bytes.Join
重新组合原始字符串

您应该检查以下内容,其中非常清楚:)

主程序包
进口(
“字节”
“fmt”
)
func main(){
str:=[]字节(“oink-oink-oink”)
旧的:=[]字节(“k”)
新:=[]字节(“X”)
splitedStr:=字节。SplitAfter(str,旧)
splitedStr[2]=字节。替换(splitedStr[2],旧,新,-1)
fmt.Printf(“%s”,bytes.Join(splitedStr,[]字节(“”))
}

Hint:搜索第n个匹配项,并在那里对输入进行切片。连接前缀、新字符串和后缀。