替换 golang 中第 N 次出现的字符串

App*_*est 5 string go

如何替换 golang 中字符串的第 n 个(在本例中为第二个)出现?下面的代码替换示例串optimismo from optimismo from optimism时,我希望它是optimismo from

package main

import (
    "fmt"
    "strings"
)

func main() {
    mystring := "optimismo from optimism"
    excludingSecond := strings.Replace(mystring, "optimism", "", 1)
    fmt.Println(excludingSecond)
}
Run Code Online (Sandbox Code Playgroud)

小智 7

对于任何在这篇文章中绊倒并希望替换最后一次出现的人

package main

import (
    "fmt"
    "strings"
)

func main() {
    mystring := "optimismo from optimism"

    i := strings.LastIndex(mystring, "optimism")
    excludingLast := mystring[:i] + strings.Replace(mystring[i:], "optimism", "", 1)
    fmt.Println(excludingLast)
}
Run Code Online (Sandbox Code Playgroud)


pet*_*rSO 5

例如,

package main

import (
    "fmt"
    "strings"
)

// Replace the nth occurrence of old in s by new.
func replaceNth(s, old, new string, n int) string {
    i := 0
    for m := 1; m <= n; m++ {
        x := strings.Index(s[i:], old)
        if x < 0 {
            break
        }
        i += x
        if m == n {
            return s[:i] + new + s[i+len(old):]
        }
        i += len(old)
    }
    return s
}

func main() {
    s := "optimismo from optimism"
    fmt.Printf("%q\n", s)
    t := replaceNth(s, "optimism", "", 2)
    fmt.Printf("%q\n", t)
}
Run Code Online (Sandbox Code Playgroud)

输出:

"optimismo from optimism"
"optimismo from "
Run Code Online (Sandbox Code Playgroud)