Пост Разделение строки на кусочек в 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, если у вас есть какие-либо вопросы или комментарии. Если я допустил ошибку в статье, обязательно дайте мне знать, чтобы я исправил ее!
Подпишитесь на мою рассылку, чтобы получать больше статей по кодированию прямо на ваш почтовый ящик.