在PHP中我们可以做类似的事情:
$result = str_replace($str,$array1,$array2);
其中$ array1和$ array2是元素数组,这使得php用array2元素替换所有array1元素。 使用Golang有没有相同的东西?我尝试过相同的php方法,但它不起作用:
str := "hello world"
array1 := []string {"hello","world"}
array2 := []string {"foo","bar"}
r := strings.NewReplacer(array1,array2)
str = r.Replace(str)
我知道我可以这样做:
str := "hello world"
array1 := []string {"hello","world"}
array2 := []string {"foo","bar"}
r := strings.NewReplacer("hello","foo","world","bar")
str = r.Replace(str)
这样可行,但我需要直接使用数组,因为将动态创建替换数组。
答案 0 :(得分:4)
我相信如果你首先在一个替换数组中压缩两个数组,然后在目标字符串上只运行一个替换器传递,性能会好得多,因为strings.Replacer针对各种情况进行了相当优化,因为替换算法需要只运行一次。
这样的事情可以做到:
func zip(a1, a2 []string) []string {
r := make([]string, 2*len(a1))
for i, e := range a1 {
r[i*2] = e
r[i*2+1] = a2[i]
}
return r
}
func main() {
str := "hello world"
array1 := []string{"hello", "world"}
array2 := []string{"foo", "bar"}
str = strings.NewReplacer(zip(array1, array2)...).Replace(str)
fmt.Println(str)
}
答案 1 :(得分:0)
我找到的解决方案如下:
str := "hello world"
array1 := []string {"hello","world"}
array2 := []string {"foo","bar"}
for i,toreplace := range array1{
r := strings.NewReplacer(toreplace,array2[i])
str = r.Replace(str)
}
fmt.Println(str)
可以创建一个功能
func str_replace(str string, original []string, replacement []string) string {
for i,toreplace := range original{
r := strings.NewReplacer(toreplace,replacement[i])
str = r.Replace(str)
}
return str
}
用法:
str := "hello world"
array1 := []string {"hello","world"}
array2 := []string {"foo","bar"}
str = str_replace(str,array1,array2)
fmt.Println(str)
任何更优雅的解决方案都非常受欢迎。
答案 2 :(得分:0)
地图怎么样?
str := "Lorem Ipsum is simply dummy. Lorem Ipsum is text of the printing. Lorem Ipsum is typesetting industry.";
replace := map[string]string{
"Lorem": "LoremReplaced",
"Ipsum": "IpsumReplaced",
"printing": "printingReplaced",
}
for s, r := range replace {
str = strings.Replace(str, s, r, -1)
}