Тип strings.Replacer

Тип strings.Replacer представляет собой структуру, которая выполняет множественные замены подстрок в строке. Он создается с помощью функции strings.NewReplacer, которая принимает пары "старая подстрока - новая подстрока" в качестве аргументов. Первый аргумент - это искомая подстрока, второй - строка, на которую ее нужно заменить, третий - следующая искомая подстрока, четвертый - следующая замена и так далее. Основной метод Replace выполняет замену в переданной строке и возвращает новую строку с выполненными заменами. Тип strings.Replacer особенно эффективен, когда нужно выполнить множество замен в одном проходе по строке или когда одни и те же правила замены применяются многократно.

Синтаксис

goreplacer := strings.NewReplacer(old1, new1, old2, new2, ...)
result := replacer.Replace(str)

Пример

Давайте создадим Replacer для замены нескольких подстрок и применим его к строке:

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  replacer := strings.NewReplacer("a", "x", "b", "y", "c", "z")
  res := replacer.Replace("abcde")
  fmt.Println(res)
}

Результат выполнения кода:

go"xyzde"

Пример

Давайте заменим несколько фраз в тексте с помощью Replacer:

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  replacer := strings.NewReplacer("hello", "hi", "world", "go", "golang", "go")
  text := "hello world and golang"
  res := replacer.Replace(text)
  fmt.Println(res)
}

Результат выполнения кода:

go"hi go and go"

Пример

Если заменяемые строки пересекаются, Replacer обрабатывает замены в порядке их определения, но с учетом того, что замены не применяются рекурсивно к уже замененным частям:

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  replacer := strings.NewReplacer("ab", "x", "bc", "y")
  res := replacer.Replace("abc")
  fmt.Println(res)
}

Результат выполнения кода:

go"xc"

В строке "abc" подстрока "ab" заменяется на "x", а оставшаяся часть "c" не заменяется, так как подстрока "bc" пересекается с уже обработанной частью.

Пример

Для более эффективного многократного использования одного и того же набора замен, можно создать Replacer один раз и использовать его множество раз:

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  replacer := strings.NewReplacer("foo", "bar", "baz", "qux")
  
  str1 := "foo and baz"
  res1 := replacer.Replace(str1)
  fmt.Println(res1)
  
  str2 := "baz and foo"
  res2 := replacer.Replace(str2)
  fmt.Println(res2)
}

Результат выполнения кода:

go"bar and qux"
"qux and bar"

Смотрите также

  • функцию strings.NewReplacer,
    которая создает новый Replacer с заданными правилами замены
  • функцию strings.Replace,
    которая заменяет ограниченное количество вхождений подстроки
  • функцию strings.ReplaceAll,
    которая заменяет все вхождения одной подстроки на другую
  • функцию strings.Trim,
    которая удаляет указанные символы из строки