Як розбити рядок у Golang? | robot_dreams
Для отслеживания статуса заказа — авторизируйтесь
Введите код, который был выслан на почту Введите код с SMS, который был выслан на номер
 
Код действителен в течение 5 минут Код с sms действителен в течение 5 минут
Вы уверены, что хотите выйти?
Сеанс завершен
На главную
Два способи: Як розбити рядок у Golang?

Два способи: Як розбити рядок у Golang?

Покрокова інструкція з прикладами

Обробка текстових даних часто потребує розбиття рядків на частини. Це може знадобитися під час парсингу файлів CSV, обробки логів, роботи з HTTP-запитами, аналізу введених користувачем даних або трансформації тексту перед збереженням у базі даних.

Як працює метод Split() у Golang?

Метод Split() у Golang (визначений у бібліотеці strings) розбиває рядок на список підрядків, використовуючи заданий роздільник. Метод повертає підрядки у вигляді зрізу (slice).

Go надає кілька способів для розбиття рядків залежно від вимог:

  • strings.Split — розділення за конкретним символом;
  • strings.SplitN — обмеження кількості частин;
  • strings.SplitAfter — збереження роздільника у результаті;
  • strings.Fields — розділення за пробілами з автоматичним видаленням зайвих;
  • regexp.Split — розбиття за складними умовами.

1. Розбиття рядка за конкретним символом (strings.Split)

Функція strings.Split дає змогу розділити рядок за конкретним роздільником.

  • Якщо роздільник є в рядку, текст розбивається між його входженнями.
  • Якщо роздільника немає, повертається список з одним елементом — самим рядком.
  • Якщо роздільник порожній, рядок розбивається за кожним символом.
  • Якщо і рядок, і роздільник порожні, повертається пустий список.

Синтаксис:

func Split(s, sep string) []string

s — рядок, який потрібно розбити.
sep — роздільник, за яким здійснюватиметься розбиття.

Наприклад:

package main

import (
	"fmt"
	"strings"
)

func main() {
	data := "apple,banana,grape,orange"
	parts := strings.Split(data, ",")
	fmt.Println(parts)
}

Результат:

[apple banana grape orange]

Як це працює?

Функція strings.Split(data, ",") шукає всі входження символу , у рядку й розрізає його у відповідних місцях.

Особливості:

  • якщо роздільника немає в рядку, функція поверне масив з одним елементом — оригінальним рядком;
  • якщо роздільник розташований на початку або в кінці рядка, масив міститиме порожні елементи.

Наприклад:

fmt.Println(strings.Split(",banana,grape,", ","))

Результат:

["" banana grape ""]

У масиві з’явилися порожні рядки через наявність роздільника на початку та в кінці.

2. Обмеження кількості частин (strings.SplitN)

Іноді потрібно розділити рядок лише певну кількість разів, залишаючи решту незмінною.

Синтаксис:

func SplitN(s, sep string, n int) []string

n — визначає максимальну кількість частин

Наприклад:

package main

import (
	"fmt"
	"strings"
)

func main() {
	text := "one-two-three-four"
	parts := strings.SplitN(text, "-", 3)
	fmt.Println(parts)
}

Результат:

[one two three-four]

Як це працює?

Функція strings.SplitN(text, "-", 3) працює так само, як strings.Split, але виконує поділ не більш як два рази. Всі інші частини залишаються в останньому елементі масиву.

Де це може знадобитися?

  • Під час парсингу логів, де потрібно витягнути лише певну кількість параметрів.
  • За обробки URL або шляху файлу, щоб отримати лише частину даних.
  • Для роботи з довгими рядками, коли потрібно розділити лише перші кілька частин.

3. Збереження роздільників у результаті (strings.SplitAfter)

Функція strings.SplitAfter працює аналогічно strings.Split, але залишає роздільник у кінці кожного елемента.

Наприклад:

package main

import (
	"fmt"
	"strings"
)

func main() {
	text := "word1;word2;word3;"
	parts := strings.SplitAfter(text, ";")
	fmt.Println(parts)
}

Результат:

[word1; word2; word3; ]

Як це працює?

Функція розбиває рядок на частини, але додає роздільник ; у кожен елемент масиву.

Де це може знадобитися?

  • Парсинг структурованих даних, де важливо зберегти роздільники.
  • Обробка форматованих рядків, як-от журнали подій або XML/JSON.

4. Розбиття рядка за пробілами (strings.Fields)

Функція strings.Fields автоматично видаляє всі зайві пробіли та повертає окремі слова.

Синтаксис:

func Fields(s string) []string

Наприклад:

package main

import (
	"fmt"
	"strings"
)

func main() {
	sentence := "   Go   is  a   powerful  language   "
	words := strings.Fields(sentence)
	fmt.Println(words)
}

Результат:

[Go is a powerful language]

Як це працює?

Функція шукає будь-які пробіли та розбиває рядок на частини, ігноруючи зайві пробіли між словами.

Де це може знадобитися?

  • Обробка введених користувачем даних, наприклад, команд у CLI або чат-боті.
  • Робота з текстовими файлами, які можуть містити випадкові пробіли.
  • Парсинг HTML або інших документів із невизначеною кількістю пробілів.

5. Розбиття за кількома роздільниками (regexp.Split)

Функція regexp.Split дає змогу розбивати рядки за кількома різними символами.

Наприклад:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	data := "item1,item2|item3 item4;item5"
	re := regexp.MustCompile(`[,|\s;]+`)
	parts := re.Split(data, -1)
	fmt.Println(parts)
}

Результат:

[item1 item2 item3 item4 item5]

Як це працює?

  • Регулярний вираз [,|\s;]+ шукає будь-які коми, вертикальні риски (|), пробіли (\s) або крапки з комою (;).
  • Всі знайдені символи використовують як роздільники, і рядок ділиться відповідно.

Де це може знадобитися?

  • Обробка даних із різних джерел, де можуть застосовувати різні роздільники.
  • Робота зі складними форматами, як-от конфігураційні файли чи журнали серверів.
  • Очищення тексту від зайвих символів перед аналізом.

У підсумку

Golang пропонує декілька способів розділення рядків, які можна використати залежно від вашого завдання. Що чіткіше ви уявляєте результат, то простіше обрати потрібний метод.

Якщо треба розділити текст за простим роздільником, підійде strings.Split, а якщо важливо обмежити кількість частин — strings.SplitN. Для розбиття за пробілами з видаленням зайвих пробілів зручніше застосовувати strings.Fields, а якщо потрібно зберегти роздільники — strings.SplitAfter. У складних випадках, коли роздільники можуть бути різними, допоможе regexp.Split.

Ещё статьи
Порівнюємо швидкість, якість і відповідальність за результат