如何替换在golang中出现的字符串的第n次(在本例中是第二次)?下面的代码将示例字符串optimismo from optimism
替换为o from optimism
,而我希望它为optimismo from
package main
import (
"fmt"
"strings"
)
func main() {
mystring := "optimismo from optimism"
excludingSecond := strings.Replace(mystring, "optimism", "", 1)
fmt.Println(excludingSecond)
}
发布于 2017-05-24 06:37:31
例如,
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)
}
输出:
"optimismo from optimism"
"optimismo from "
发布于 2019-03-05 04:35:09
对于任何偶然发现这篇文章并希望替换上一篇文章的人
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)
}
发布于 2017-05-24 04:54:08
如果你总是知道会有两个,你可以使用https://godoc.org/strings#Index来找到第一个的索引,然后对之后的所有内容进行替换,最后将它们组合在一起。
https://play.golang.org/p/CeJFViNjgH
func main() {
search := "optimism"
mystring := "optimismo from optimism"
// find index of the first and add the length to get the end of the word
ind := strings.Index(mystring, search)
if ind == -1 {
fmt.Println("doesn't exist")
return // error case
}
ind += len(search)
excludingSecond := mystring[:ind]
// run replace on everything after the first one
excludingSecond += strings.Replace(mystring[ind:], search, "", 1)
fmt.Println(excludingSecond)
}
https://stackoverflow.com/questions/44144641
复制相似问题