Шаг 28.
Язык программирования Go.
Примеры использования функций пакета strings
На этом шаге рассмотрим примеры использования функций пакета strings для работы со строками в Go.
Задание 1. Разбить строку на слова (слова разделены одним пробелом).
Раскрыть/скрыть решение и комментарии.
s := "мама мыла раму с мылом"
for _, str := range strings.Split(s, " ") {
fmt.Println(str)
}
Результат работы программы представлен на рисунке 1.
Рис.1. Разбиение строки на слова
Здесь имеется строка слов, разделенных одним пробелом, которая разбивается с помощью функции strings.Split(). Эта функция принимает исходную строку и строку-разделитель, по которой должно выполняться разбиение, и делит исходную строку на максимально возможное количество фрагментов.
Архив примера можно взять здесь.
Задание 2. Выделить в строке первые два слова (слова разделены символом "|").
Раскрыть/скрыть решение и комментарии.
s := "мама|мыла|раму|с|мылом"
for _, str := range strings.SplitN(s, "|", 3) {
fmt.Println(str)
}
Если потребуется ограничить количество разбиений, можно воспользоваться функцией strings.SplitN().
Результат работы программы представлен на рисунке 2.
Рис.2. Выделение первых двух слов в строке
Архив примера можно взять здесь.
Задание 3. Выделить в строке слова с сохранением разделителя (слова разделены символом "|").
Раскрыть/скрыть решение и комментарии.
s := "мама|мыла|раму|с|мылом"
for _, str := range strings.SplitAfter(s, "|") {
fmt.Println(str)
}
Функция strings.SplitAfter() разбивает исходную строку точно так же, как и функция strings.Split(), но сохраняет строку-разделитель. Существует также функция strings.SplitAfterN() на случай, если потребуется ограничить число разбиений.
Результат работы программы представлен на рисунке 3.
Рис.3. Выделение слов в строке с сохранением разделителя
Архив примера можно взять здесь.
Задание 4. Разбить строку на слова (слова разделены различными символами).
Раскрыть/скрыть решение и комментарии.
for _, str := range []string{"Gottfried*Wilhelm*Leibniz\t1646*1716",
"Николай|Иванович|Лобачевский\t1792*1856",
"Ο|πυθαγόρας\tVI*αι.*π.*χ."}{
fmt.Println(strings.FieldsFunc(str, func(char rune) bool {
switch char {
case '\t', '*', '|':
return true
}
return false
}))
Для разбиения строк по любому из двух или более различных символов можно использовать функцию strings.FieldsFunc().
Функция strings.FieldsFunc() принимает строку (в данном примере – переменную str) и ссылку на функцию с сигнатурой func(rune) bool. Поскольку функция достаточно маленькая и используется только в одном месте, она была определена как анонимная функция в месте, где она используется. Функция strings.FieldsFunc() выполняет итерации по всем символам в указанной строке, для каждого из них вызывает функцию, переданную во втором аргументе, и выполняет разбиение, если вызванная функция вернет true. В данном случае строка разбивается по символам табуляции, звездочки и вертикальной черты.
Результат работы программы представлен на рисунке 4.
Рис.4. Выделение слов в строке по любому символу
Архив примера можно взять здесь.
Задание 5. Заменить все вхождения подстроки в строку.
Раскрыть/скрыть решение и комментарии.
s = "ένα\tδύο\tτρία"
s = strings.Replace(s, "\t", " ", -1)
fmt.Printf("%s", s)
Замену всех вхождений подстроки в строке можно выполнить с помощью функции strings.Replace(), которая принимает строку для обработки, искомую подстроку, строку замены, количество замен (значение –1 означает максимально возможное количество замен) и возвращает строку, где все вхождения (неперекрывающиеся) искомой подстроки замещены указанной строкой замены.
Результат работы программы представлен на рисунке 5.
Рис.5. Замена подстроки
Архив примера можно взять здесь.
Задание 6. Удалить пробельные символы в начале и в конце строки и заменить последовательности пробельных символов внутри строки единственным пробелом.
Раскрыть/скрыть решение и комментарии.
s = " ένα δύο τρία "
fmt.Println(s)
fmt.Println(strings.Join(strings.Fields(strings.TrimSpace(s)), " "))
Функция strings.TrimSpace() возвращает копию переданной ей строки, в которой удалены все начальные и конечные пробельные символы. Функция strings.Fields() разбивает исходную строку по пробельным символам и возвращает значение типа []string. А функция strings.Join() принимает значение типа []string, строку-разделитель (может быть пустой строкой, однако здесь используется пробел) и возвращает единую строку, в которую через строку-разделитель объединены все строки из среза типа []string. С помощью комбинации этих трех функций выполняется нормализация строк по пробельным символам.
Результат работы программы представлен на рисунке 6.
Рис.6. Нормализация строки
Архив примера можно взять здесь.
На следующем шаге рассмотрим функции пакета strconv.
Предыдущий шаг
Содержание
Следующий шаг