go - 如何替换 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) {
}```
解决方案
您可以尝试使用 的组合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("")))
}