Почему строка. Замена не работает в Голанге - PullRequest
0 голосов
/ 26 ноября 2018

Я делаю программу для удаления букв из строки, если они существуют.Но ожидаемый результат не придет.Программа, которую я попробовал, приведена ниже: -

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

Если я использую строку fmt.Println(removalString) в цикле for, то она напечатает результат: -

вывод: -

This is  string
This is a string
This is a string
thisisastring

Ожидаемый вывод: -

thisisstring

kheedn li link

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Вы всегда применяете операцию замены к исходной строке strValue, поэтому после цикла будет удалено только последнее удаляемое слово (которое даже не содержится в вашем примере).Вы должны сохранить результат strings.Replace() (вы делаете это) и использовать его в следующей итерации:

removalString := strValue
for _, wordToRemove := range stringRemove {
    removalString = strings.Replace(removalString, wordToRemove, "", -1)
}

А также использовать это в своей последней замене:

result := strings.Replace(removalString, " ", "", -1)
result1 := strings.ToLower(result)

Тогда вывод будет (попробуйте на Go Playground ):

This is  string
thisisstring

Также обратите внимание, что для удаления пробелов вы можете добавить это в список удаляемых слов, и вы неНе нужно всегда создавать новые переменные, вы можете повторно использовать существующие.

Это также выполнит то же преобразование:

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)

Попробуйте на Go Playground .

0 голосов
/ 26 ноября 2018

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)
0 голосов
/ 26 ноября 2018

это то, что вы ищете:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...