Тип strings.Replacer
Тип strings.Replacer представляет собой структуру, которая выполняет множественные замены подстрок в строке. Он создается с помощью функции strings.NewReplacer, которая принимает пары "старая подстрока - новая подстрока" в качестве аргументов. Первый аргумент - это искомая подстрока, второй - строка, на которую ее нужно заменить, третий - следующая искомая подстрока, четвертый - следующая замена и так далее. Основной метод Replace выполняет замену в переданной строке и возвращает новую строку с выполненными заменами. Тип strings.Replacer особенно эффективен, когда нужно выполнить множество замен в одном проходе по строке или когда одни и те же правила замены применяются многократно.
Синтаксис
replacer := strings.NewReplacer(old1, new1, old2, new2, ...)
result := replacer.Replace(str)
Пример
Давайте создадим Replacer для замены нескольких подстрок и применим его к строке:
package main
import (
"fmt"
"strings"
)
func main() {
replacer := strings.NewReplacer("a", "x", "b", "y", "c", "z")
res := replacer.Replace("abcde")
fmt.Println(res)
}
Результат выполнения кода:
"xyzde"
Пример
Давайте заменим несколько фраз в тексте с помощью Replacer:
package 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)
}
Результат выполнения кода:
"hi go and go"
Пример
Если заменяемые строки пересекаются, Replacer обрабатывает замены в порядке их определения, но с учетом того, что замены не применяются рекурсивно к уже замененным частям:
package main
import (
"fmt"
"strings"
)
func main() {
replacer := strings.NewReplacer("ab", "x", "bc", "y")
res := replacer.Replace("abc")
fmt.Println(res)
}
Результат выполнения кода:
"xc"
В строке "abc" подстрока "ab" заменяется на "x", а оставшаяся часть "c" не заменяется, так как подстрока "bc" пересекается с уже обработанной частью.
Пример
Для более эффективного многократного использования одного и того же набора замен, можно создать Replacer один раз и использовать его множество раз:
package 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)
}
Результат выполнения кода:
"bar and qux"
"qux and bar"
Смотрите также
-
функцию
strings.NewReplacer,
которая создает новыйReplacerс заданными правилами замены -
функцию
strings.Replace,
которая заменяет ограниченное количество вхождений подстроки -
функцию
strings.ReplaceAll,
которая заменяет все вхождения одной подстроки на другую -
функцию
strings.Trim,
которая удаляет указанные символы из строки