Пост Разделение строки на кусочек в Golang впервые появился на Qvault.

Не могу сказать, как часто я разбивал струны в го. Чаще всего я просто анализирую список, разделенный запятыми, из переменной среды, а стандартная библиотека Go предоставляет нам отличные инструменты для такого рода манипуляций.

Разделить запятыми или другими разделителями

строки.Split ()

Богатая стандартная библиотека Go позволяет очень легко разделить строку. В 99% случаев, когда вам нужно разбивать строки в Go, вам понадобится функция strings.Split () из пакета strings.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fruitsString := "apple,banana,orange,pear"
    fruits := strings.Split(fruitsString, ",")
    fmt.Println(fruits)
    // prints ["apple", "banana", "orange", "pear"]
}

строки.SplitN ()

Функция strings.SplitN () принимает три аргумента: разделяемую строку, разделитель и количество результирующих строк в срезе.

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

package main

import (
    "fmt"
    "strings"
)

func main() {
    fruitsString := "apple.banana.orange.pear"
    fruits := strings.SplitN(fruitsString, ".", 3)
    fmt.Println(fruits)
    // prints ["apple", "banana", "orange.pear"]
}

Разделить по разделителям с сохранением разделителей

строки.SplitAfter ()

Подобно Split(), SplitAfter() разделяет исходную строку, но оставляет разделители в конце каждой подстроки.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fruitsString := "apple.banana.orange.pear"
    fruits := strings.SplitAfter(fruitsString, ".")
    fmt.Println(fruits)
    // prints ["apple.", "banana.", "orange.", "pear"]
}

строки.SplitAfterN ()

SplitAfterN делает то же самое, что и SplitAfter, за исключением того, что разделяет только первые N подстроки. Все остальное сохраняется в последней подстроке.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fruitsString := "apple.banana.orange.pear"
    fruits := strings.SplitAfterN(fruitsString, ".", 2)
    fmt.Println(fruits)
    // prints ["apple.", "banana.orange.pear"]
}

Разделить пробелами и символами новой строки

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

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Printf("Fields are: %q", strings.Fields(`apple
     banana orange
     pear
     `))
    // prints ["apple", "banana", "orange", "pear"]
}

Разделить с помощью регулярного выражения

Регулярные выражения - популярный способ манипулировать строками, и встроенный движок регулярных выражений Go может нам в этом помочь. На самом деле нам даже не нужно использовать пакет strings, вместо этого мы будем использовать пакет regexp.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := regexp.MustCompile("[0-9]").Split("apple1banana2orange3pear", -1)
    fmt.Println(s)
    // prints ["apple", "banana", "orange", "pear"]
}

Попался - струны в го особенные

Помните, когда вы работаете с большим количеством строк, что Go обрабатывает строки иначе, чем другие языки, такие как Java, C и Python. Строки в Go - это фрагменты байтов, доступные только для чтения, и эти байты произвольны - они могут быть чем угодно. Строки в Go не обязательны для хранения текста Unicode, текста UTF-8 или любого другого формата кодировки.

Спасибо, что прочитали, теперь пройдите курс!

Заинтересованы в высокооплачиваемой работе в сфере высоких технологий? Посещайте собеседования и успешно проходите их после прохождения практических курсов программирования.

Начни кодирование сейчас

Вопросы?

Подпишитесь на меня в Twitter @q_vault, если у вас есть какие-либо вопросы или комментарии. Если я допустил ошибку в статье, обязательно дайте мне знать, чтобы я исправил ее!

Подпишитесь на мою рассылку, чтобы получать больше статей по кодированию прямо на ваш почтовый ящик.