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

问题描述 投票:-1回答:1

如何替换func函数(s,old,new []字节,n int)[]个字节,其中给定三个字节s,sold,new和整数n的切片返回与s对应的切片,其中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) {

}```
go replace slice
1个回答
0
投票

[您可以尝试使用bytes.SplitAfter的组合,它将在分隔符(对您而言较旧)后,在切片的N个元素上将bytes.Replace()拆分为原始字符串,然后,bytes.Join进行重新组合您的原始字符串。

您应该检查documentation,这很清楚:)

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("")))
}

© www.soinside.com 2019 - 2024. All rights reserved.