Входные данные в виде строк могут содержать слишком много или наоборот — слишком мало пробелов, а также неподходящие для отступов символы. Далее будет показано, как управлять ненужными символами в Golang и отформатировать строку в соответствии с потребностями программы.
Как убрать пробелы из строки в Golang?
1. Создайте файл whitespace.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package main import ( "fmt" "math" "regexp" "strconv" "strings" ) func main() { stringToTrim := "\t\t\n Go \tis\t Awesome \t\t" trimResult := strings.TrimSpace(stringToTrim) fmt.Println(trimResult) stringWithSpaces := "\t\t\n Go \tis\n Awesome \t\t" r := regexp.MustCompile("\\s+") replace := r.ReplaceAllString(stringWithSpaces, " ") fmt.Println(replace) needSpace := "need space" fmt.Println(pad(needSpace, 14, "CENTER")) fmt.Println(pad(needSpace, 14, "LEFT")) } func pad(input string, padLen int, align string) string { inputLen := len(input) if inputLen >= padLen { return input } repeat := padLen - inputLen var output string switch align { case "RIGHT": output = fmt.Sprintf("% "+strconv.Itoa(-padLen)+"s", input) case "LEFT": output = fmt.Sprintf("% "+strconv.Itoa(padLen)+"s", input) case "CENTER": bothRepeat := float64(repeat) / float64(2) left := int(math.Floor(bothRepeat)) + inputLen right := int(math.Ceil(bothRepeat)) output = fmt.Sprintf("% "+strconv.Itoa(left)+"s% "+strconv.Itoa(right)+"s", input, "") } return output } |
2. Запустите код через go run whitespace.go
;
3. Посмотрите на вывод:
Функция TrimSpace() для удаления лишних пробелов
Обрезка строки перед ее обработкой является довольно распространенной практикой. Как продемонстрировано в примере, это легко сделать с помощью стандартной библиотеки Go. Библиотека strings
также предоставляет несколько вариаций функции TrimXXX
, что позволяет обрезать символы из строки.
Убрать пробелы в начале или в конце строки можно через использование функции TrimSpace
из пакета strings
. Это типизирует следующую часть кода, которая также была включена в
пример ранее:
1 2 |
stringToTrim := "\t\t\n Go \tis\t Awesome \t\t" stringToTrim = strings.TrimSpace(stringToTrim) |
Пакет regex
подходит для замены нескольких пробелов и отступов табуляции, таким образом строку можно подготовить для дальнейшей обработки. Обратите внимание, что через этот метод оборванные строки заменяются одним пробелом.
Следующая часть кода показывает использование регулярного выражения для замены нескольких пробелов одним:
1 2 |
r := regexp.MustCompile("\\s+") replace := r.ReplaceAllString(stringToTrim, " ") |
У отступов нет отдельной функции в пакете strings
, однако их можно добиться через функцию Sprintf
пакета fmt
. Функция pad
в коде используется для форматирования паттерна % <+/-padding>s
и некоторой простой математики для нахождения отступа. Знак минуса перед padding
нужен для правого отступа, а положительное число для левого отступа.
Для более подробной информации о работе с регулярными выражениями можете ознакомиться с текстом Поиск текста в строке, используя регулярные выражения.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»