首页 > 解决方案 > 如何替换 Go 中的第 n 次出现

问题描述

如何替换 func 函数 (s, old, new [] bytes, n int) [] bytes which,给定三个字节切片 s、old、new 和一个整数 n,返回对应于 s 的切片,其中第 n 次出现的 old 被 new 替换。如果这种情况不存在,函数返回 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) {

}```

标签: goreplaceslice

解决方案


您可以尝试使用 的组合bytes.SplitAfter,它将在分隔符(对您来说是旧的)之后拆分原始字符串,bytes.Replace()在切片的 N 元素上,然后bytes.Join重新组合原始字符串。

您应该检查非常清楚的文档:)

package main

import (
    "bytes"
    "fmt"
)

func main() {
    str := []byte("oink oink oink oink")
    old := []byte("k")
    new := []byte("X")

    splitedStr := bytes.SplitAfter(str, old)
    splitedStr[2] = bytes.Replace(splitedStr[2], old, new, -1)


    fmt.Printf("%s", bytes.Join(splitedStr, []byte("")))
}


推荐阅读