DevGang
Авторизоваться

Замена нескольких строк в Golang с помощью Replacer

Замены строк в Golang очень просты с помощью пакета strings. Из документации: «Пакет stings реализуют простые функции для управления строками в кодировке UTF-8». Возьмите следующее предложение:

"Hello World!"

Теперь предположим, что мой владелец продукта считает, что сказать «Hello World» с восклицательным знаком — мне нужно заменить ! на . что очень легко сделать в Golang:

myString := "Hello World!"
myString = strings.ReplaceAll(myString, "!", ".")
fmt.Println(myString)

Результатом будет Hello World.. Как видите, использование strings.ReplaceAll очень простое:

  1. Укажите строку, с которой вы хотите работать
  2. Укажите символ для замены
  3. Укажите на какой символ заменять

И теперь вы знаете, как заменить строку в Golang, поздравляю! Примечание: также есть метод strings.Replace, где вы можете контролировать, сколько раз замена выполняется в вашей строке.

Когда это не так просто

Замена — это здорово, но что, если ваша строка выглядит примерно так:

"Hello_World!_This.sentence.has_chars_I.want_to.remove!"

Наш владелец продукта говорит, что это предложение не будет работать, и нам нужно заменить _ и . пробелом. Теперь, когда мы знаем, как использовать strings.ReplaceAll, мы можем легко сделать что-то вроде этого:

myString := "Hello_World!_This.sentence.has_chars_I.want_to.remove!"
myString = strings.ReplaceAll(myString, "_", " ")
myString = strings.ReplaceAll(myString, ".", " ")
fmt.Println(myString)

Результатом будет Hello World! This sentence has chars I want to remove!. В этом примере у нас все еще есть довольно простое предложение с двумя разными символами для замены. Это не так уж плохо, и мы можем довольно легко достичь нашей цели, используя дважды strings.ReplaceAll.

Но что, если нам нужно заменить 5 символов, или 10, или 20? У нас может быть 20 операторов strings.ReplaceAll, и это будет работать нормально, но это громоздко. Или что, если мне нужно выполнить эту замену в нескольких функциях? Это может быстро превратиться в беспорядок. Давайте посмотрим на лучший способ.

Использование Replacer

В пакет strings входит метод strings.Replacer. Из документации: «Replacer заменяет список строк заменами. Это безопасно для одновременного использования несколькими горутинами». По сути, вы можете указать список замен, которые нужно выполнить, а затем выполнить их все сразу для вашей целевой строки:

myString := "Hello_World!_This.sentence.has_chars_I.want_to.remove!"
replacer := strings.NewReplacer("_", " ", ".", " ")
myString = replacer.Replace(myString)
fmt.Println(myString)

Результатом будет Hello World! This sentence has chars I want to remove!. Использование функции Replacer также очень просто:

  1. Создайте новый Replacer со всеми символами, которые вы хотите заменить
  2. Примените его к своей строке

В этом примере это не сэкономило нам ни одной строки кода, но ничего страшного, это простой пример. Но это настраивает нас на гораздо более сложные сценарии, такие как:

  1. Необходимо заменить 5, 10, 20 разных символов
  2. Необходимость передать заменитель любой функции, которая должна выполнять точно такие же замены
#Golang
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В подарок 100$ на счет при регистрации

Получить