go - 如何替换Go中的第n个出现

标签 go replace slice

如何替换func函数(s,old,new []字节,n int)[]个字节,给定三个
字节s,sold,new和整数n的 slice 返回与s对应的 slice ,其中
旧的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的组合,该组合将在分隔符(对您而言较旧)之后拆分原始字符串,在 slice 的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("")))
}

关于go - 如何替换Go中的第n个出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59949880/

相关文章:

arrays - 跟踪并显示下载文件摘要(百分比) - Go lang

winapi - 使用 Golang 获取 Windows 空闲时间(GetLastInputInfo 或类似)

Javascript 替换字符串中的内容(如果存在)

regex - Notepad++ 正则表达式组捕获语法

多个模式匹配后替换数据表列中的多个值

rust - 为什么我在 Rust 中取出数组的一部分后不能打印它?

python - 拦截 Python 中的切片操作

go - 我的程序有什么错误?我已经使用了这些值?

go - Go 有自动生成吗?

python - 如何使用变量来切片 Python 列表?