Golang Strings.
Работа со строками. Погружение в Golang Strings.
Есть много причин, по которым нам может быть нужно работать со строками по-разному. Ниже приведены некоторые ситуации, с которыми вы, вероятно, столкнетесь и для которых есть решение в библиотеке strings :
- пользовательский ввод или анализ тектса, который может содержать специальные символы, которые нам необходимо обрабатывать.
- проверка, содержит ли строка то, что нам нужно
- разбор, анализ файла, пока мы не получим данные из текста, которые нам нужны, может быть, например, число или дата.
п - вывод, иногда нам нужно представить текст определенным образом в пользовательском интерфейсе, например, чтобы выделить указанную информацию.
@Golang_google – ресурсы и гайды для эффективного изучения Go
Strings. Обработка специальных символов
Допустим, мы читаем пользовательский ввод и хотим интерпретировать полученную строку как число. Чтобы сделать нашу программу надежной, допускаем ввод пользователем пробелов или символов пеереноса строки.
В коде Должен быть разрешен следующий ввод:
114
114
114\n
Для обработки такого случая нам нужны три метода ( который содержится в пакете Golang strings ), а именно Trim(), TrimLeft() и TrimRight().
-Trim() удаляет пробельные символы как с левой, так и с правой стороны.
– TrimLeft(). Он удаляет пробелы только с левой стороны, а также, если вы укажете специальные символы.
–TrimRight(). Он удаляет пробелы только с правой стороны, а также, если вы укажете специальные символы.
Все эти функции имеют в качестве второго параметра так называемый параметр cutset, где вы указываете, от какого символа хотите избавиться. Например, вы можете указать удалить символы пробела, новой строки и табуляции следующим образом:
" \n\t"
Вот некоторый код, который показывает использование всех трех методов:
fmt.Printf("%s , string length %d \n", s, len(s))
res := strings.Trim(s, " ")
fmt.Printf("%s , string length %d \n", res, len(res))
s2 := " 114 "
fmt.Printf("%s , string length %d \n", s2, len(s2))
res = strings.TrimLeft(s2, " ")
fmt.Printf("%s , string length %d \n", res, len(res))
s3 := " 114 "
fmt.Printf("%s , string length %d \n", s3, len(s3))
res = strings.TrimRight(s3, " ")
fmt.Printf("%s , string length %d \n", res, len(res))
fmt.Printf("I love Golang strings ")
Вышеупомянутая строка имеет три пробела слева и два справа, ее длина равна 8.
Вывод приведенного выше кода:
114 , string length 8
114 , string length 3
114 , string length 8
114 , string length 5
114 , string length 8
114 , string length 6
I love Golang strings
Возможно, вы подумали: Давайте разобьем выходные данные по строкам. Для этого вывода с помощью Trim() пробелы удаляются с обеих сторон, и мы получаем строку выравненную по левому краю:
Давайте разобьем текст по строкам.
Для этого вывода с помощью Trim() пробелы удаляются с двух сторон, и мы получим текст, выравненный по левому краю:
"114"
Следующий вывод с использованием TrimLeft() показывает, что пробелы все еще существуют:
"114 "
Наша последняя строка, использующая TrimRight(), показывает выравнивание по правому краю и то, как остаются пробелы с левой стороны:
" 114"
Проверить строки с помощью функции Contains()
Представьте, что вы хотите проверить строку, чтобы убедиться, что она содержит определенную подстроку.
Для этого вы можете использовать функцию Contains(). Его синтаксис выглядит так:
strings.Contains(stringSource, pattern)
Затем вы можете, например, использовать его для обработки списка из системы торговых точек и для каждого элемента проверять, содержит ли он определенные строки в списке:
rows := []string{"order: 5", "order: 10", "order: 5", "separator"}
for item := range rows {
if strings.Contains("order") {
// process order
}
// ignore
}
Парсинг strings с помощью Split()
Давайте продолжим обработку строк из нашей системы точек продаж. На этот раз мы будем смотреть на конкретный элемент и извлекать необходимую нам информацию. Для этого воспользуемся функцией Split():
rows := []string{"order: 5", "order: 10", "order: 5", "separator"}
for item := range rows {
if strings.Contains("order") {
tokens := strings.Split(item, ":") // [ "order", " 5"]
value := strings.Trim(tokens[1])
fmt.Println(value)
}
// strings Go
}
Используя этот код:
strings.Split(item, ":")
в этой строке «order: 5» мы получаем массив [«order», «5»] и strings.Trim(tokens[1]), которая будет ссылаться на 5.
Практика Golang strings
Допустим, у вас есть система управления клиентами, и вам нужно обработать много данных. Чтобы выделить определенную часть данных, мы можем использовать функции для выделения их внешнего вида.
Возьмите строку:
Jean Normand
123 Way
Washington
Если вы используете ToUpper() для строк, вы получите такой результат:
Jean Normand
123 Way
WASHINGTON
С ToLower() вы увидите, что все символы отформатированы как строчные.
Задача для работы со строками в GO
Напишите программу, которая по заданной структуре, содержащей имя, адрес и город, которая выведет все имена в нижнем регистре, а адреса в верхнем.
Решение
package main
import (
"fmt"
"strings"
)
type Person struct {
Name string
Address string
City string
}
func main() {
person := Person{Name: "jean Normand", Address: "123 Way", City: "Washington"}
fmt.Println(strings.ToUpper(person.Name))
fmt.Println(person.Address)
fmt.Println(strings.ToUpper(person.City))
}
Мы рассмотрели основные методы по работе Golang strings. Предлагаем вам задачу для самостоятельного решения.
Что выведет код?
package main
import "fmt"
func main() {
animals := []string{"bear", "bear", "rabbit", "wolf"}
for _, animal := range animals {
switch animal {
case "rabbit":
fmt.Println(animal, "is so weak!")
fallthrough
case "bear", "wolf":
fmt.Println(animal, "is so strong!")
}
}
}
Ответ: https://t.me/golangtests/238
А здесь вы найдете roadmap для изучения Go