Основы работы с пакетом strings в Go

Пакет strings в Go имеет несколько функций для работы со строковым типом данных. Эти функции позволяют легко модифицировать и управлять строками. Функции здесь можно рассматривать как действия, которые мы выполняем над элементами нашего кода. Встроенные функции – это те, которые определены в языке программирования Go и доступны для использования.

В этом мануале мы рассмотрим несколько различных функций, которые можно использовать для работы со строками в Go.

Изменение регистра строк

Функции strings.ToUpper и strings.ToLower возвращают строки, преобразовывая все их буквы в прописные или строчные. Поскольку строки являются неизменяемым типом данных, возвращаемая строка будет новой строкой. Любые символы в строке, которые не являются буквами, не будут изменены.

Чтобы преобразовать строку «Perfect Blog» в верхний регистр, нужно использовать функцию strings.ToUpper:

ss := "Perfect Blog"
fmt.Println(strings.ToUpper(ss))
PERFECT BLOG

Чтобы преобразовать эту строку в нижний регистр, нужно использовать:

fmt.Println(strings.ToLower(ss))
perfect blog

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

package main
import (
"fmt"
"strings"
)
func main() {
ss := "Perfect Blog"
fmt.Println(strings.ToUpper(ss))
fmt.Println(strings.ToLower(ss))
}

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

Функции поиска

Пакет strings имеет ряд функций, которые помогают определить, содержит ли строка определенную последовательность символов.

Функция Действие
strings.HasPrefix Ищет строку с начала
strings.HasSuffix Ищет строку с конца
strings.Contains Поиск в любом месте строки
strings.Count Подсчитывает, сколько раз встречается эта строка

Strings.HasPrefix и strings.HasSuffix позволяют проверить, начинается/заканчивается ли строка определенным набором символов.

Например, чтобы проверить, начинается ли строка «Perfect Blog» с Perfect и заканчивается на Blog, нужно использовать:

ss := "Perfect Blog"
fmt.Println(strings.HasPrefix(ss, "Perfect"))
fmt.Println(strings.HasSuffix(ss, "Blog"))
true
true

Можно было бы использовать функцию strings.Contains, чтобы проверить, содержит ли «Perfect Blog» последовательность Bl:

fmt.Println(strings.Contains(ss, "Bl"))
true

Наконец, так можно увидеть, сколько раз буква е появляется во фразе Perfect Blog:

fmt.Println(strings.Count(ss, "е"))
2

Примечание. Все строки в Go чувствительны к регистру. Это означает, что Perfect и perfect – не одно и то же.

Теперь попробуйте узнать, сколько раз во фразе Perfect Blog встречается прописная Е:

fmt.Println(strings.Count(ss, "Е"))
0

Поскольку символы Е и е – не одно и тоже, вы получите 0.

Строковые функции позволяют найти или сравнить строки в вашей программе.

Определение длины строки

Встроенная функция len() возвращает количество символов в строке. Эта функция полезна в тех случаях, когда вам нужно задать минимальную или максимальную длину пароля или обрезать строки большего размера, чтобы они находились в определенных пределах (для сокращений, например).

Чтобы продемонстрировать эту функцию, давайте попробуем узнать длину такого предложения:

import (
"fmt"
"strings"
)
func main() {
openSource := "8host contributes to open source."
fmt.Println(len(openSource))
}
33

Переменная openSource равна строке «8host contributes to open source.», она передается в функцию len() с помощью len(openSource). Наконец, мы передаем функцию в fmt.Println(), чтобы увидеть вывод программы на экране.

Имейте в виду, что функция len() будет подсчитывать все символы внутри двойных кавычек, включая буквы, цифры, пробелы и другие символы.

Функции управления строками

Функции strings.Join, strings.Split и strings.ReplaceAll – это несколько дополнительных вариантов для управления строками в Go.

Функция strings.Join полезна для объединения срезов строк в новую единственную строку.

Чтобы создать разделенную запятыми строку из срезов, можно было бы использовать эту функцию таким образом:

fmt.Println(strings.Join([]string{"sharks", "crustaceans", "plankton"}, ","))
sharks,crustaceans,plankton

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

strings.Join([]string{"sharks", "crustaceans", "plankton"}, ", ")

Аналогично можно и разбивать строки. Для этого можно использовать функцию strings.Split и разделить строку по пробелам:

balloon := "Johnny has a balloon."
s := strings.Split(balloon, " ")
fmt.Println(s)
[Johnny has a balloon]

На выходе получается срез. Так как мы использовали strings.Println, трудно понять, что именно получилось в выводе, просто посмотрев на него. Чтобы увидеть, что это действительно срез, используйте функцию fmt.Printf с оператором %q, чтобы заключить новые строки в кавычки:

fmt.Printf("%q", s)
["Johnny" "has" "a" "balloon."]

Еще одна полезная функция в дополнение к strings.Split – это strings.Fields. Разница в том, что strings.Fields игнорирует все пробелы и выделяет только действительные поля в строке:

data := "  username password     email  date"
fields := strings.Fields(data)
fmt.Printf("%q", fields)
["username" "password" "email" "date"]

Функция strings.ReplaceAll может взять исходную строку и вернуть обновленную строку с заменой.

Предположим, что Джонни потерял свой воздушный шар. Поскольку у него больше нет шара, мы можем заменить подстроку «has» из исходной строки на «had» в новой строке:

fmt.Println(strings.ReplaceAll(balloon, "has", "had"))

В скобках находится переменная balloon, которая хранит исходную строку; вторая подстрока «has» — это то, что мы хотели бы заменить, а третья подстрока «had» — это то, чем нужно заменить вторую подстроку. Вывод будет выглядеть так:

Johnny had a balloon.

Использование строковых функций strings.Join, strings.Split и strings.ReplaceAll предоставит вам больше возможностей для управления строками в Go.

Заключение

В этом мануале вы узнали о некоторых общих функциях пакета string, которые вы можете использовать для работы со строками в ваших программах Go.

Читайте также:

Tags: ,