String 为什么字符串.Replace在golang不起作用

String 为什么字符串.Replace在golang不起作用,string,go,replace,String,Go,Replace,我正在制作一个程序来删除字符串中存在的字母。但预期的结果不会出现。我尝试过的程序如下:- package main import ( "fmt" "strings" ) func main() { strValue := "This is a string" stringRemove := []string{"a", "an"} var removalString string for _, wordToRemove := range stringRemove {

我正在制作一个程序来删除字符串中存在的字母。但预期的结果不会出现。我尝试过的程序如下:-

package main

import (
  "fmt"
  "strings"
)

func main() {
  strValue := "This is a string"
  stringRemove := []string{"a", "an"}
  var removalString string
  for _, wordToRemove := range stringRemove {
      removalString = strings.Replace(strValue, wordToRemove, "", -1)
  }
  fmt.Println(removalString)
  result := strings.Replace(strValue, " ", "", -1)
  result1 := strings.ToLower(result)
  fmt.Println(result1)
}
输出:-

This is a string
thisisastring
如果我在for循环中使用行
fmt.Println(removalString)
,那么它将打印结果:-

输出:-

This is  string
This is a string
This is a string
thisisastring
预期产出:-

thisisstring

这就是你要找的:

package main

import (
  "fmt"
  "strings"
)

func main() {
  strValue := "This is a string"
  stringRemove := []string{"a", "an"}
  removalString := strValue
  for _, wordToRemove := range stringRemove {
      removalString = strings.Replace(removalString, wordToRemove, "", -1)
  }
  fmt.Println(removalString)
  result := strings.Replace(strValue, " ", "", -1)
  result1 := strings.ToLower(result)
  fmt.Println(result1)
}

您总是对原始字符串
strValue
应用replace操作,因此在循环之后,只会删除最后一个可移动单词(您的示例中甚至没有包含)。您应该存储
字符串的结果。Replace()
(您可以这样做),并在下一次迭代中使用它:

removalString := strValue
for _, wordToRemove := range stringRemove {
    removalString = strings.Replace(removalString, wordToRemove, "", -1)
}
并在最后一次更换时使用:

result := strings.Replace(removalString, " ", "", -1)
result1 := strings.ToLower(result)
然后输出将是(在上尝试):

还请注意,要删除空格,可以将其添加到可删除单词列表中,并且不需要总是创建新变量,可以重用现有变量

这也将执行相同的转换:

s := "This is a string"
words := []string{"a", "an", " "}

for _, word := range words {
    s = strings.Replace(s, word, "", -1)
}

s = strings.ToLower(s)
fmt.Println(s)

在上尝试。

removalString
将在每个循环中设置新值。因此
fmt.Println(removalString)
将显示最后一个循环的结果

var removalString string
for _, wordToRemove := range stringRemove {
    removalString = strings.Replace(strValue, wordToRemove, "", -1)
}
fmt.Println(removalString)
你可以这样做

strValue := "This is a string"
stringRemove := []string{"a", "an"}
for _, wordToRemove := range stringRemove {
    strValue = strings.Replace(strValue, wordToRemove, "", -1)
}
fmt.Println(strValue)

如果我要更改行this
result:=strings.Replace(removalString,“”,“-”,-1)
那么我将包括三个破折号,但如果空间很大,我需要一个破折号。我怎样才能得到它。请参阅:-@user10665991您可以将
“-”
替换为
“-”
,重复替换,直到没有更改(替换)。或者你可以使用regexp。你能告诉我正则表达式吗?我花了很多时间来解决这个问题:(
strValue := "This is a string"
stringRemove := []string{"a", "an"}
for _, wordToRemove := range stringRemove {
    strValue = strings.Replace(strValue, wordToRemove, "", -1)
}
fmt.Println(strValue)