Spec-Zone.ru › Go

Пакет strings

  • import "strings"
  • Обзор
  • Указатель
  • Примеры

Обзор

Пакет strings реализует простые функции для работы со строками в кодировке UTF-8.

Сведения о строках UTF-8 в Go см. на странице https://blog.golang.org/strings.

Указатель

  • func Clone(s string) string
  • func Compare(a, b string) int
  • func Contains(s, substr string) bool
  • func ContainsAny(s, chars string) bool
  • func ContainsFunc(s string, f func(rune) bool) bool
  • func ContainsRune(s string, r rune) bool
  • func Count(s, substr string) int
  • func Cut(s, sep string) (before, after string, found bool)
  • func CutLast(s, sep string) (before, after string, found bool)
  • func CutPrefix(s, prefix string) (after string, found bool)
  • func CutSuffix(s, suffix string) (before string, found bool)
  • func EqualFold(s, t string) bool
  • func Fields(s string) []string
  • func FieldsFunc(s string, f func(rune) bool) []string
  • func FieldsFuncSeq(s string, f func(rune) bool) iter.Seq[string]
  • func FieldsSeq(s string) iter.Seq[string]
  • func HasPrefix(s, prefix string) bool
  • func HasSuffix(s, suffix string) bool
  • func Index(s, substr string) int
  • func IndexAny(s, chars string) int
  • func IndexByte(s string, c byte) int
  • func IndexFunc(s string, f func(rune) bool) int
  • func IndexRune(s string, r rune) int
  • func Join(elems []string, sep string) string
  • func LastIndex(s, substr string) int
  • func LastIndexAny(s, chars string) int
  • func LastIndexByte(s string, c byte) int
  • func LastIndexFunc(s string, f func(rune) bool) int
  • func Lines(s string) iter.Seq[string]
  • func Map(mapping func(rune) rune, s string) string
  • func Repeat(s string, count int) string
  • func Replace(s, old, new string, n int) string
  • func ReplaceAll(s, old, new string) string
  • func Split(s, sep string) []string
  • func SplitAfter(s, sep string) []string
  • func SplitAfterN(s, sep string, n int) []string
  • func SplitAfterSeq(s, sep string) iter.Seq[string]
  • func SplitN(s, sep string, n int) []string
  • func SplitSeq(s, sep string) iter.Seq[string]
  • func Title(s string) string
  • func ToLower(s string) string
  • func ToLowerSpecial(c unicode.SpecialCase, s string) string
  • func ToTitle(s string) string
  • func ToTitleSpecial(c unicode.SpecialCase, s string) string
  • func ToUpper(s string) string
  • func ToUpperSpecial(c unicode.SpecialCase, s string) string
  • func ToValidUTF8(s, replacement string) string
  • func Trim(s, cutset string) string
  • func TrimFunc(s string, f func(rune) bool) string
  • func TrimLeft(s, cutset string) string
  • func TrimLeftFunc(s string, f func(rune) bool) string
  • func TrimPrefix(s, prefix string) string
  • func TrimRight(s, cutset string) string
  • func TrimRightFunc(s string, f func(rune) bool) string
  • func TrimSpace(s string) string
  • func TrimSuffix(s, suffix string) string
  • type Builder
  • func (b *Builder) Cap() int
  • func (b *Builder) Grow(n int)
  • func (b *Builder) Len() int
  • func (b *Builder) Reset()
  • func (b *Builder) String() string
  • func (b *Builder) Write(p []byte) (int, error)
  • func (b *Builder) WriteByte(c byte) error
  • func (b *Builder) WriteRune(r rune) (int, error)
  • func (b *Builder) WriteString(s string) (int, error)
  • type Reader
  • func NewReader(s string) *Reader
  • func (r *Reader) Len() int
  • func (r *Reader) Read(b []byte) (n int, err error)
  • func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
  • func (r *Reader) ReadByte() (byte, error)
  • func (r *Reader) ReadRune() (ch rune, size int, err error)
  • func (r *Reader) Reset(s string)
  • func (r *Reader) Seek(offset int64, whence int) (int64, error)
  • func (r *Reader) Size() int64
  • func (r *Reader) UnreadByte() error
  • func (r *Reader) UnreadRune() error
  • func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
  • type Replacer
  • func NewReplacer(oldnew ...string) *Replacer
  • func (r *Replacer) Replace(s string) string
  • func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)

Примеры

Builder
Clone
Compare
Contains
ContainsAny
ContainsFunc
ContainsRune
Count
Cut
CutPrefix
CutSuffix
EqualFold
Fields
FieldsFunc
FieldsFuncSeq
FieldsSeq
HasPrefix
HasSuffix
Index
IndexAny
IndexByte
IndexFunc
IndexRune
Join
LastIndex
LastIndexAny
LastIndexByte
LastIndexFunc
Lines
Map
NewReplacer
Repeat
Replace
ReplaceAll
Split
SplitAfter
SplitAfterN
SplitAfterSeq
SplitN
SplitSeq
Title
ToLower
ToLowerSpecial
ToTitle
ToTitleSpecial
ToUpper
ToUpperSpecial
ToValidUTF8
Trim
TrimFunc
TrimLeft
TrimLeftFunc
TrimPrefix
TrimRight
TrimRightFunc
TrimSpace
TrimSuffix

Файлы пакета

builder.go clone.go compare.go iter.go reader.go replace.go search.go strings.go

func Clone 1.18

func Clone(s string) string

Clone возвращает новую копию s. Функция гарантирует, что создаст копию s в новой области памяти, что может быть важно, если нужно сохранить небольшую подстроку из гораздо более длинной строки. Использование Clone может помочь таким программам потреблять меньше памяти. Разумеется, поскольку Clone создает копию, чрезмерное использование Clone может привести к увеличению потребления памяти программами. Как правило, Clone следует использовать редко и только в тех случаях, когда профилирование показывает, что это необходимо. Для строк нулевой длины возвращается строка "", при этом выделение памяти не производится.

Пример

Код:

s := "abc"
clone := strings.Clone(s)
fmt.Println(s == clone)
fmt.Println(unsafe.StringData(s) == unsafe.StringData(clone))

Вывод:

true
false

func Compare 1.5

func Compare(a, b string) int

Compare возвращает целое число, сравнивающее две строки в лексикографическом порядке. Результат равен 0, если a == b, -1, если a < b, и +1, если a > b.

Используйте Compare, когда необходимо выполнить трехстороннее сравнение (например, с slices.SortFunc). Обычно понятнее и всегда быстрее использовать встроенные операторы сравнения строк ==, <, > и т. д.

Пример

Код:

fmt.Println(strings.Compare("a", "b"))
fmt.Println(strings.Compare("a", "a"))
fmt.Println(strings.Compare("b", "a"))

Вывод:

-1
0
1

func Contains

func Contains(s, substr string) bool

Contains сообщает, содержится ли substr в s.

Пример

Код:

fmt.Println(strings.Contains("seafood", "foo"))
fmt.Println(strings.Contains("seafood", "bar"))
fmt.Println(strings.Contains("seafood", ""))
fmt.Println(strings.Contains("", ""))

Вывод:

true
false
true
true

func ContainsAny

func ContainsAny(s, chars string) bool

ContainsAny сообщает, содержится ли в s хотя бы одна кодовая точка Unicode из chars.

Пример

Код:

fmt.Println(strings.ContainsAny("team", "i"))
fmt.Println(strings.ContainsAny("fail", "ui"))
fmt.Println(strings.ContainsAny("ure", "ui"))
fmt.Println(strings.ContainsAny("failure", "ui"))
fmt.Println(strings.ContainsAny("foo", ""))
fmt.Println(strings.ContainsAny("", ""))

Вывод:

false
true
true
true
false
false

func ContainsFunc 1.21

func ContainsFunc(s string, f func(rune) bool) bool

ContainsFunc сообщает, есть ли среди кодовых точек Unicode r в s такие, для которых выполняется f(r). Функция прекращает работу, как только вызов f возвращает true.

Пример

Код:

f := func(r rune) bool {
    return r == 'a' || r == 'e' || r == 'i' || r == 'o' || r == 'u'
}
fmt.Println(strings.ContainsFunc("hello", f))
fmt.Println(strings.ContainsFunc("rhythms", f))

Вывод:

true
false

func ContainsRune

func ContainsRune(s string, r rune) bool

ContainsRune сообщает, содержится ли в s кодовая точка Unicode r.

Пример

Код:

// Finds whether a string contains a particular Unicode code point.
// The code point for the lowercase letter "a", for example, is 97.
fmt.Println(strings.ContainsRune("aardvark", 97))
fmt.Println(strings.ContainsRune("timeout", 97))

Вывод:

true
false

func Count

func Count(s, substr string) int

Count подсчитывает количество неперекрывающихся вхождений substr в s. Если substr — пустая строка, Count возвращает 1 плюс количество кодовых точек Unicode в s.

Пример

Код:

fmt.Println(strings.Count("cheese", "e"))
fmt.Println(strings.Count("five", "")) // before & after each rune

Вывод:

3
5

func Cut 1.18

func Cut(s, sep string) (before, after string, found bool)

Cut разделяет s по первому вхождению sep, возвращая текст до и после sep. Результат found сообщает, встречается ли sep в s. Если sep не встречается в s, Cut возвращает s, "", false.

Пример

Код:

show := func(s, sep string) {
    before, after, found := strings.Cut(s, sep)
    fmt.Printf("Cut(%q, %q) = %q, %q, %v\n", s, sep, before, after, found)
}
show("Gopher", "Go")
show("Gopher", "ph")
show("Gopher", "er")
show("Gopher", "Badger")

Вывод:

Cut("Gopher", "Go") = "", "pher", true
Cut("Gopher", "ph") = "Go", "er", true
Cut("Gopher", "er") = "Goph", "", true
Cut("Gopher", "Badger") = "Gopher", "", false

func CutLast 1.27

func CutLast(s, sep string) (before, after string, found bool)

CutLast разделяет s по последнему вхождению sep и возвращает текст до и после sep. Результат found указывает, встречается ли sep в s. Если sep не встречается в s, CutLast возвращает s, "", false.

func CutPrefix 1.20

func CutPrefix(s, prefix string) (after string, found bool)

CutPrefix возвращает s без указанной начальной строки-префикса и сообщает, найден ли этот префикс. Если s не начинается с prefix, CutPrefix возвращает s, false. Если prefix — пустая строка, CutPrefix возвращает s, true.

Пример

Код:

show := func(s, prefix string) {
    after, found := strings.CutPrefix(s, prefix)
    fmt.Printf("CutPrefix(%q, %q) = %q, %v\n", s, prefix, after, found)
}
show("Gopher", "Go")
show("Gopher", "ph")

Вывод:

CutPrefix("Gopher", "Go") = "pher", true
CutPrefix("Gopher", "ph") = "Gopher", false

func CutSuffix 1.20

func CutSuffix(s, suffix string) (before string, found bool)

CutSuffix возвращает s без указанной конечной строки-суффикса и сообщает, найден ли этот суффикс. Если s не заканчивается на suffix, CutSuffix возвращает s, false. Если suffix — пустая строка, CutSuffix возвращает s, true.

Пример

Код:

show := func(s, suffix string) {
    before, found := strings.CutSuffix(s, suffix)
    fmt.Printf("CutSuffix(%q, %q) = %q, %v\n", s, suffix, before, found)
}
show("Gopher", "Go")
show("Gopher", "er")

Вывод:

CutSuffix("Gopher", "Go") = "Gopher", false
CutSuffix("Gopher", "er") = "Goph", true

func EqualFold

func EqualFold(s, t string) bool

EqualFold сообщает, равны ли s и t, интерпретируемые как строки UTF-8, при простом Unicode-преобразовании регистра, которое является более общей формой сравнения без учета регистра.

Пример

Код:

fmt.Println(strings.EqualFold("Go", "go"))
fmt.Println(strings.EqualFold("AB", "ab")) // true because comparison uses simple case-folding
fmt.Println(strings.EqualFold("ß", "ss"))  // false because comparison does not use full case-folding

Вывод:

true
true
false

func Fields

func Fields(s string) []string

Fields разделяет строку s по каждому вхождению одного или нескольких последовательных пробельных символов, определяемых функцией unicode.IsSpace, и возвращает срез подстрок s либо пустой срез, если s содержит только пробельные символы. Все элементы возвращаемого среза непустые. В отличие от Split, начальные и конечные последовательности пробельных символов отбрасываются.

Пример

Код:

fmt.Printf("Fields are: %q", strings.Fields("  foo bar  baz   "))

Вывод:

Fields are: ["foo" "bar" "baz"]

func FieldsFunc

func FieldsFunc(s string, f func(rune) bool) []string

FieldsFunc разделяет строку s по каждой последовательности кодовых точек Unicode c, удовлетворяющих условию f(c), и возвращает срез подстрок s. Если все кодовые точки в s удовлетворяют условию f(c) или строка пуста, возвращается пустой срез. Все элементы возвращаемого среза непустые. В отличие от Split, начальные и конечные последовательности кодовых точек, удовлетворяющих условию f(c), отбрасываются.

FieldsFunc не гарантирует порядок вызова f(c) и предполагает, что f всегда возвращает одно и то же значение для заданной c.

Пример

Код:

f := func(c rune) bool {
    return !unicode.IsLetter(c) && !unicode.IsNumber(c)
}
fmt.Printf("Fields are: %q", strings.FieldsFunc("  foo1;bar2,baz3...", f))

Вывод:

Fields are: ["foo1" "bar2" "baz3"]

func FieldsFuncSeq 1.24

func FieldsFuncSeq(s string, f func(rune) bool) iter.Seq[string]

FieldsFuncSeq возвращает итератор по подстрокам s, разделённым по последовательностям кодовых точек Unicode, удовлетворяющих условию f(c). Итератор выдаёт те же строки, которые вернул бы вызов FieldsFunc(s), но без создания среза.

Пример

Код:

text := "The quick brown fox"
fmt.Println("Split on whitespace(similar to FieldsSeq):")
for word := range strings.FieldsFuncSeq(text, unicode.IsSpace) {
    fmt.Printf("%q\n", word)
}

mixedText := "abc123def456ghi"
fmt.Println("\nSplit on digits:")
for word := range strings.FieldsFuncSeq(mixedText, unicode.IsDigit) {
    fmt.Printf("%q\n", word)
}

Вывод:

Split on whitespace(similar to FieldsSeq):
"The"
"quick"
"brown"
"fox"

Split on digits:
"abc"
"def"
"ghi"

func FieldsSeq 1.24

func FieldsSeq(s string) iter.Seq[string]

FieldsSeq возвращает итератор по подстрокам s, разделённым по последовательностям пробельных символов, определяемых функцией unicode.IsSpace. Итератор выдаёт те же строки, которые вернул бы вызов Fields(s), но без создания среза.

Пример

Код:

text := "The quick brown fox"
fmt.Println("Split string into fields:")
for word := range strings.FieldsSeq(text) {
    fmt.Printf("%q\n", word)
}

textWithSpaces := "  lots   of   spaces  "
fmt.Println("\nSplit string with multiple spaces:")
for word := range strings.FieldsSeq(textWithSpaces) {
    fmt.Printf("%q\n", word)
}

Вывод:

Split string into fields:
"The"
"quick"
"brown"
"fox"

Split string with multiple spaces:
"lots"
"of"
"spaces"

func HasPrefix

func HasPrefix(s, prefix string) bool

HasPrefix сообщает, начинается ли строка s с prefix.

Пример

Код:

fmt.Println(strings.HasPrefix("Gopher", "Go"))
fmt.Println(strings.HasPrefix("Gopher", "C"))
fmt.Println(strings.HasPrefix("Gopher", ""))

Вывод:

true
false
true

func HasSuffix

func HasSuffix(s, suffix string) bool

HasSuffix сообщает, заканчивается ли строка s на suffix.

Пример

Код:

fmt.Println(strings.HasSuffix("Amigo", "go"))
fmt.Println(strings.HasSuffix("Amigo", "O"))
fmt.Println(strings.HasSuffix("Amigo", "Ami"))
fmt.Println(strings.HasSuffix("Amigo", ""))

Вывод:

true
false
false
true

func Index

func Index(s, substr string) int

Index возвращает индекс первого вхождения substr в s или -1, если substr отсутствует в s.

Пример

Код:

fmt.Println(strings.Index("chicken", "ken"))
fmt.Println(strings.Index("chicken", "dmr"))

Вывод:

4
-1

func IndexAny

func IndexAny(s, chars string) int

IndexAny возвращает индекс первого вхождения любой кодовой точки Unicode из chars в s или -1, если ни одна кодовая точка Unicode из chars не встречается в s.

Пример

Код:

fmt.Println(strings.IndexAny("chicken", "aeiouy"))
fmt.Println(strings.IndexAny("crwth", "aeiouy"))

Вывод:

2
-1

func IndexByte 1.2

func IndexByte(s string, c byte) int

IndexByte возвращает индекс первого вхождения c в s или -1, если c отсутствует в s.

Пример

Код:

fmt.Println(strings.IndexByte("golang", 'g'))
fmt.Println(strings.IndexByte("gophers", 'h'))
fmt.Println(strings.IndexByte("golang", 'x'))

Вывод:

0
3
-1

func IndexFunc

func IndexFunc(s string, f func(rune) bool) int

IndexFunc возвращает индекс в s первой кодовой точки Unicode, удовлетворяющей условию f(c), или -1, если такой нет.

Пример

Код:

f := func(c rune) bool {
    return unicode.Is(unicode.Han, c)
}
fmt.Println(strings.IndexFunc("Hello, 世界", f))
fmt.Println(strings.IndexFunc("Hello, world", f))

Вывод:

7
-1

func IndexRune

func IndexRune(s string, r rune) int

IndexRune возвращает индекс первого вхождения кодовой точки Unicode r или -1, если rune отсутствует в s. Если r — utf8.RuneError, функция возвращает индекс первого вхождения любой некорректной последовательности байтов UTF-8.

Пример

Код:

fmt.Println(strings.IndexRune("chicken", 'k'))
fmt.Println(strings.IndexRune("chicken", 'd'))

Вывод:

4
-1

func Join

func Join(elems []string, sep string) string

Join объединяет элементы первого аргумента в одну строку. Строка-разделитель sep помещается между элементами результирующей строки.

Пример

Код:

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))

Вывод:

foo, bar, baz

func LastIndex

func LastIndex(s, substr string) int

LastIndex возвращает индекс последнего вхождения substr в s или -1, если substr отсутствует в s.

Пример

Код:

fmt.Println(strings.Index("go gopher", "go"))
fmt.Println(strings.LastIndex("go gopher", "go"))
fmt.Println(strings.LastIndex("go gopher", "rodent"))

Вывод:

0
3
-1

func LastIndexAny

func LastIndexAny(s, chars string) int

LastIndexAny возвращает индекс последнего вхождения любой кодовой точки Unicode из chars в s или -1, если ни одна кодовая точка Unicode из chars не встречается в s.

Пример

Код:

fmt.Println(strings.LastIndexAny("go gopher", "go"))
fmt.Println(strings.LastIndexAny("go gopher", "rodent"))
fmt.Println(strings.LastIndexAny("go gopher", "fail"))

Вывод:

4
8
-1

func LastIndexByte 1.5

func LastIndexByte(s string, c byte) int

LastIndexByte возвращает индекс последнего вхождения c в s или -1, если c отсутствует в s.

Пример

Код:

fmt.Println(strings.LastIndexByte("Hello, world", 'l'))
fmt.Println(strings.LastIndexByte("Hello, world", 'o'))
fmt.Println(strings.LastIndexByte("Hello, world", 'x'))

Вывод:

10
8
-1

func LastIndexFunc

func LastIndexFunc(s string, f func(rune) bool) int

LastIndexFunc возвращает индекс последней кодовой точки Unicode в s, для которой выполняется f(c), или -1, если таких нет.

Пример

Код:

fmt.Println(strings.LastIndexFunc("go 123", unicode.IsNumber))
fmt.Println(strings.LastIndexFunc("123 go", unicode.IsNumber))
fmt.Println(strings.LastIndexFunc("go", unicode.IsNumber))

Вывод:

5
2
-1

func Lines 1.24

func Lines(s string) iter.Seq[string]

Lines возвращает итератор по строкам строки s, заканчивающимся символом новой строки. Строки, выдаваемые итератором, включают завершающие символы новой строки. Если s пуста, итератор не выдаёт ни одной строки. Если s не заканчивается символом новой строки, последняя выданная строка не будет заканчиваться символом новой строки. Возвращает одноразовый итератор.

Пример

Код:

text := "Hello\nWorld\nGo Programming\n"
for line := range strings.Lines(text) {
    fmt.Printf("%q\n", line)
}

Вывод:

"Hello\n"
"World\n"
"Go Programming\n"

func Map

func Map(mapping func(rune) rune, s string) string

Map возвращает копию строки s, в которой все символы изменены в соответствии с функцией отображения. Если отображение возвращает отрицательное значение, символ удаляется из строки без замены.

Пример

Код:

rot13 := func(r rune) rune {
    switch {
    case r >= 'A' && r <= 'Z':
        return 'A' + (r-'A'+13)%26
    case r >= 'a' && r <= 'z':
        return 'a' + (r-'a'+13)%26
    }
    return r
}
fmt.Println(strings.Map(rot13, "'Twas brillig and the slithy gopher..."))

Вывод:

'Gjnf oevyyvt naq gur fyvgul tbcure...

func Repeat

func Repeat(s string, count int) string

Repeat возвращает новую строку, состоящую из count копий строки s.

Функция вызывает панику, если count отрицателен или результат выражения (len(s) * count) переполняется.

Пример

Код:

fmt.Println("ba" + strings.Repeat("na", 2))

Вывод:

banana

func Replace

func Replace(s, old, new string, n int) string

Replace возвращает копию строки s, в которой первые n неперекрывающихся вхождений old заменены на new. Если old пуста, она совпадает в начале строки и после каждой последовательности UTF-8, что даёт до k+1 замен для строки из k рун. Если n < 0, количество замен не ограничено.

Пример

Код:

fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))

Вывод:

oinky oinky oink
moo moo moo

func ReplaceAll 1.12

func ReplaceAll(s, old, new string) string

ReplaceAll возвращает копию строки s, в которой все неперекрывающиеся вхождения old заменены на new. Если old пуста, она совпадает в начале строки и после каждой последовательности UTF-8, что даёт до k+1 замен для строки из k рун.

Пример

Код:

fmt.Println(strings.ReplaceAll("oink oink oink", "oink", "moo"))

Вывод:

moo moo moo

func Split

func Split(s, sep string) []string

Split разбивает s на подстроки, разделённые sep, и возвращает срез подстрок между этими разделителями.

Если s не содержит sep, а sep не пуста, Split возвращает срез длины 1, единственным элементом которого является s.

Если sep пуста, Split разбивает строку после каждой последовательности UTF-8. Если и s, и sep пусты, Split возвращает пустой срез.

Эквивалентно вызову SplitN со значением count, равным -1.

Чтобы разделить строку по первому вхождению разделителя, см. Cut.

Пример

Код:

fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
fmt.Printf("%q\n", strings.Split(" xyz ", ""))
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))

Вывод:

["a" "b" "c"]
["" "man " "plan " "canal panama"]
[" " "x" "y" "z" " "]
[""]

func SplitAfter

func SplitAfter(s, sep string) []string

SplitAfter разбивает s на подстроки после каждого вхождения sep и возвращает срез этих подстрок.

Если s не содержит sep, а sep не пуста, SplitAfter возвращает срез длины 1, единственным элементом которого является s.

Если sep пуста, SplitAfter разбивает строку после каждой последовательности UTF-8. Если и s, и sep пусты, SplitAfter возвращает пустой срез.

Эквивалентно вызову SplitAfterN со значением count, равным -1.

Пример

Код:

fmt.Printf("%q\n", strings.SplitAfter("a,b,c", ","))

Вывод:

["a," "b," "c"]

func SplitAfterN

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

SplitAfterN разбивает s на подстроки после каждого вхождения sep и возвращает срез этих подстрок.

Параметр count определяет количество возвращаемых подстрок:

  • n > 0: не более n подстрок; последней подстрокой будет оставшаяся неразделённая часть;
  • n == 0: результат — nil (ноль подстрок);
  • n < 0: все подстроки.

Особые случаи для s и sep (например, пустые строки) обрабатываются так, как описано в документации для SplitAfter.

Пример

Код:

fmt.Printf("%q\n", strings.SplitAfterN("a,b,c", ",", 2))

Вывод:

["a," "b,c"]

func SplitAfterSeq 1.24

func SplitAfterSeq(s, sep string) iter.Seq[string]

SplitAfterSeq возвращает итератор по подстрокам s, разделённым после каждого вхождения sep. Итератор выдаёт те же строки, что и SplitAfter(s, sep), но не создаёт срез. Возвращает одноразовый итератор.

Пример

Код:

s := "a,b,c,d"
for part := range strings.SplitAfterSeq(s, ",") {
    fmt.Printf("%q\n", part)
}

Вывод:

"a,"
"b,"
"c,"
"d"

func SplitN

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

SplitN разбивает s на подстроки, разделённые sep, и возвращает срез подстрок между этими разделителями.

Параметр count определяет количество возвращаемых подстрок:

  • n > 0: не более n подстрок; последней подстрокой будет оставшаяся неразделённая часть;
  • n == 0: результат — nil (ноль подстрок);
  • n < 0: все подстроки.

Особые случаи для s и sep (например, пустые строки) обрабатываются так, как описано в документации для Split.

Чтобы разделить строку по первому вхождению разделителя, см. Cut.

Пример

Код:

fmt.Printf("%q\n", strings.SplitN("a,b,c", ",", 2))
z := strings.SplitN("a,b,c", ",", 0)
fmt.Printf("%q (nil = %v)\n", z, z == nil)

Вывод:

["a" "b,c"]
[] (nil = true)

func SplitSeq 1.24

func SplitSeq(s, sep string) iter.Seq[string]

SplitSeq возвращает итератор по всем подстрокам s, разделённым sep. Итератор выдаёт те же строки, что и Split(s, sep), но не создаёт срез. Возвращает одноразовый итератор.

Пример

Код:

s := "a,b,c,d"
for part := range strings.SplitSeq(s, ",") {
    fmt.Printf("%q\n", part)
}

Вывод:

"a"
"b"
"c"
"d"

func Title

func Title(s string) string

Title возвращает копию строки s, в которой все буквы Unicode, начинающие слова, преобразованы в соответствующий регистр Unicode для заголовков.

Устарело: правило, используемое Title для определения границ слов, некорректно обрабатывает знаки пунктуации Unicode. Вместо него используйте golang.org/x/text/cases.

Пример

Код:

// Compare this example to the ToTitle example.
fmt.Println(strings.Title("her royal highness"))
fmt.Println(strings.Title("loud noises"))
fmt.Println(strings.Title("брат"))

Вывод:

Her Royal Highness
Loud Noises
Брат

func ToLower

func ToLower(s string) string

ToLower возвращает s, в которой все буквы Unicode преобразованы в нижний регистр.

Пример

Код:

fmt.Println(strings.ToLower("Gopher"))

Вывод:

gopher

func ToLowerSpecial

func ToLowerSpecial(c unicode.SpecialCase, s string) string

ToLowerSpecial возвращает копию строки s, в которой все буквы Unicode преобразованы в нижний регистр с использованием преобразования регистра, заданного параметром c.

Пример

Код:

fmt.Println(strings.ToLowerSpecial(unicode.TurkishCase, "Örnek İş"))

Вывод:

örnek iş

func ToTitle

func ToTitle(s string) string

ToTitle возвращает копию строки s, в которой все буквы Unicode преобразованы в верхний регистр с учетом правил заголовочного регистра Unicode.

Пример

Код:

// Compare this example to the Title example.
fmt.Println(strings.ToTitle("her royal highness"))
fmt.Println(strings.ToTitle("loud noises"))
fmt.Println(strings.ToTitle("брат"))

Вывод:

HER ROYAL HIGHNESS
LOUD NOISES
БРАТ

func ToTitleSpecial

func ToTitleSpecial(c unicode.SpecialCase, s string) string

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

Пример

Код:

fmt.Println(strings.ToTitleSpecial(unicode.TurkishCase, "dünyanın ilk borsa yapısı Aizonai kabul edilir"))

Вывод:

DÜNYANIN İLK BORSA YAPISI AİZONAİ KABUL EDİLİR

func ToUpper

func ToUpper(s string) string

ToUpper возвращает строку s, в которой все буквы Unicode преобразованы в верхний регистр.

Пример

Код:

fmt.Println(strings.ToUpper("Gopher"))

Вывод:

GOPHER

func ToUpperSpecial

func ToUpperSpecial(c unicode.SpecialCase, s string) string

ToUpperSpecial возвращает копию строки s, в которой все буквы Unicode преобразованы в верхний регистр с использованием правил изменения регистра, заданных параметром c.

Пример

Код:

fmt.Println(strings.ToUpperSpecial(unicode.TurkishCase, "örnek iş"))

Вывод:

ÖRNEK İŞ

func ToValidUTF8 1.13

func ToValidUTF8(s, replacement string) string

ToValidUTF8 возвращает копию строки s, в которой каждая последовательность недопустимых байтов UTF-8 заменена строкой замены, которая может быть пустой.

Пример

Код:

fmt.Printf("%s\n", strings.ToValidUTF8("abc", "\uFFFD"))
fmt.Printf("%s\n", strings.ToValidUTF8("a\xffb\xC0\xAFc\xff", ""))
fmt.Printf("%s\n", strings.ToValidUTF8("\xed\xa0\x80", "abc"))

Вывод:

abc
abc
abc

func Trim

func Trim(s, cutset string) string

Trim возвращает срез строки s, из которого удалены все начальные и конечные кодовые точки Unicode, содержащиеся в cutset.

Пример

Код:

fmt.Print(strings.Trim("¡¡¡Hello, Gophers!!!", "!¡"))

Вывод:

Hello, Gophers

func TrimFunc

func TrimFunc(s string, f func(rune) bool) string

TrimFunc возвращает срез строки s, из которого удалены все начальные и конечные кодовые точки Unicode c, удовлетворяющие условию f(c).

Пример

Код:

fmt.Print(strings.TrimFunc("¡¡¡Hello, Gophers!!!", func(r rune) bool {
    return !unicode.IsLetter(r) && !unicode.IsNumber(r)
}))

Вывод:

Hello, Gophers

func TrimLeft

func TrimLeft(s, cutset string) string

TrimLeft возвращает срез строки s, из которого удалены все начальные кодовые точки Unicode, содержащиеся в cutset.

Чтобы удалить префикс, используйте вместо этого TrimPrefix.

Пример

Код:

fmt.Print(strings.TrimLeft("¡¡¡Hello, Gophers!!!", "!¡"))

Вывод:

Hello, Gophers!!!

func TrimLeftFunc

func TrimLeftFunc(s string, f func(rune) bool) string

TrimLeftFunc возвращает срез строки s, из которого удалены все начальные кодовые точки Unicode c, удовлетворяющие условию f(c).

Пример

Код:

fmt.Print(strings.TrimLeftFunc("¡¡¡Hello, Gophers!!!", func(r rune) bool {
    return !unicode.IsLetter(r) && !unicode.IsNumber(r)
}))

Вывод:

Hello, Gophers!!!

func TrimPrefix 1.1

func TrimPrefix(s, prefix string) string

TrimPrefix возвращает строку s без указанного префикса. Если строка s не начинается с prefix, s возвращается без изменений.

Пример

Код:

var s = "¡¡¡Hello, Gophers!!!"
s = strings.TrimPrefix(s, "¡¡¡Hello, ")
s = strings.TrimPrefix(s, "¡¡¡Howdy, ")
fmt.Print(s)

Вывод:

Gophers!!!

func TrimRight

func TrimRight(s, cutset string) string

TrimRight возвращает срез строки s, из которого удалены все конечные кодовые точки Unicode, содержащиеся в cutset.

Чтобы удалить суффикс, используйте вместо этого TrimSuffix.

Пример

Код:

fmt.Print(strings.TrimRight("¡¡¡Hello, Gophers!!!", "!¡"))

Вывод:

¡¡¡Hello, Gophers

func TrimRightFunc

func TrimRightFunc(s string, f func(rune) bool) string

TrimRightFunc возвращает срез строки s, из которого удалены все конечные кодовые точки Unicode c, удовлетворяющие условию f(c).

Пример

Код:

fmt.Print(strings.TrimRightFunc("¡¡¡Hello, Gophers!!!", func(r rune) bool {
    return !unicode.IsLetter(r) && !unicode.IsNumber(r)
}))

Вывод:

¡¡¡Hello, Gophers

func TrimSpace

func TrimSpace(s string) string

TrimSpace возвращает срез (подстроку) строки s, из которого удалены все начальные и конечные пробельные символы согласно определению Unicode.

Пример

Код:

fmt.Println(strings.TrimSpace(" \t\n Hello, Gophers \n\t\r\n"))

Вывод:

Hello, Gophers

func TrimSuffix 1.1

func TrimSuffix(s, suffix string) string

TrimSuffix возвращает строку s без указанного суффикса. Если строка s не заканчивается на suffix, s возвращается без изменений.

Пример

Код:

var s = "¡¡¡Hello, Gophers!!!"
s = strings.TrimSuffix(s, ", Gophers!!!")
s = strings.TrimSuffix(s, ", Marmots!!!")
fmt.Print(s)

Вывод:

¡¡¡Hello

type Builder 1.10

Builder используется для эффективного создания строки с помощью методов Builder.Write. Он сводит к минимуму копирование памяти. Нулевое значение готово к использованию. Не копируйте ненулевое значение Builder.

type Builder struct {
    // contains filtered or unexported fields
}

Пример

Код:

var b strings.Builder
for i := 3; i >= 1; i-- {
    fmt.Fprintf(&b, "%d...", i)
}
b.WriteString("ignition")
fmt.Println(b.String())

Вывод:

3...2...1...ignition

func (*Builder) Cap 1.12

func (b *Builder) Cap() int

Cap возвращает емкость базового среза байтов builder. Это общий объем памяти, выделенный для создаваемой строки, включая уже записанные байты.

func (*Builder) Grow 1.10

func (b *Builder) Grow(n int)

Grow увеличивает емкость b при необходимости, чтобы гарантировать место еще для n байтов. После вызова Grow(n) в b можно записать не менее n байтов без дополнительного выделения памяти. Если n отрицательно, Grow вызывает панику.

func (*Builder) Len 1.10

func (b *Builder) Len() int

Len возвращает количество накопленных байтов; b.Len() == len(b.String()).

func (*Builder) Reset 1.10

func (b *Builder) Reset()

Reset очищает Builder.

func (*Builder) String 1.10

func (b *Builder) String() string

String возвращает накопленную строку.

func (*Builder) Write 1.10

func (b *Builder) Write(p []byte) (int, error)

Write добавляет содержимое p в буфер b. Write всегда возвращает len(p), nil.

func (*Builder) WriteByte 1.10

func (b *Builder) WriteByte(c byte) error

WriteByte добавляет байт c в буфер b. Возвращаемая ошибка всегда равна nil.

func (*Builder) WriteRune 1.10

func (b *Builder) WriteRune(r rune) (int, error)

WriteRune добавляет в буфер b кодовую точку Unicode r в кодировке UTF-8. Функция возвращает количество записанных байтов и nil в качестве ошибки.

func (*Builder) WriteString 1.10

func (b *Builder) WriteString(s string) (int, error)

WriteString добавляет содержимое s в буфер b. Функция возвращает длину s и nil в качестве ошибки.

тип Reader

Reader реализует интерфейсы io.Reader, io.ReaderAt, io.ByteReader, io.ByteScanner, io.RuneReader, io.RuneScanner, io.Seeker и io.WriterTo, выполняя чтение из строки. Нулевое значение Reader работает как Reader пустой строки.

type Reader struct {
    // contains filtered or unexported fields
}

func NewReader

func NewReader(s string) *Reader

NewReader возвращает новый Reader, выполняющий чтение из s. Он похож на bytes.NewBufferString, но более эффективен и не поддерживает запись.

func (*Reader) Len

func (r *Reader) Len() int

Len возвращает количество байтов в непрочитанной части строки.

func (*Reader) Read

func (r *Reader) Read(b []byte) (n int, err error)

Read реализует интерфейс io.Reader.

func (*Reader) ReadAt

func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)

ReadAt реализует интерфейс io.ReaderAt.

func (*Reader) ReadByte

func (r *Reader) ReadByte() (byte, error)

ReadByte реализует интерфейс io.ByteReader.

func (*Reader) ReadRune

func (r *Reader) ReadRune() (ch rune, size int, err error)

ReadRune реализует интерфейс io.RuneReader.

func (*Reader) Reset 1.7

func (r *Reader) Reset(s string)

Reset сбрасывает Reader, чтобы он выполнял чтение из s.

func (*Reader) Seek

func (r *Reader) Seek(offset int64, whence int) (int64, error)

Seek реализует интерфейс io.Seeker.

func (*Reader) Size 1.5

func (r *Reader) Size() int64

Size возвращает исходную длину базовой строки. Size — это количество байтов, доступных для чтения через Reader.ReadAt. Возвращаемое значение всегда одинаково и не зависит от вызовов других методов.

func (*Reader) UnreadByte

func (r *Reader) UnreadByte() error

UnreadByte реализует интерфейс io.ByteScanner.

func (*Reader) UnreadRune

func (r *Reader) UnreadRune() error

UnreadRune реализует интерфейс io.RuneScanner.

func (*Reader) WriteTo 1.1

func (r *Reader) WriteTo(w io.Writer) (n int64, err error)

WriteTo реализует интерфейс io.WriterTo.

тип Replacer

Replacer заменяет список строк заданными строками-заменами. Он безопасен для одновременного использования несколькими горутинами.

type Replacer struct {
    // contains filtered or unexported fields
}

func NewReplacer

func NewReplacer(oldnew ...string) *Replacer

NewReplacer возвращает новый Replacer на основе списка пар старых и новых строк. Замены выполняются в порядке их появления в целевой строке, без перекрывающихся совпадений. Сравнение старых строк выполняется в порядке аргументов.

NewReplacer вызывает панику, если передано нечётное количество аргументов.

Пример

Код:

r := strings.NewReplacer("<", "&lt;", ">", "&gt;")
fmt.Println(r.Replace("This is <b>HTML</b>!"))

Вывод:

This is &lt;b&gt;HTML&lt;/b&gt;!

func (*Replacer) Replace

func (r *Replacer) Replace(s string) string

Replace возвращает копию s, в которой выполнены все замены.

func (*Replacer) WriteString

func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)

WriteString записывает s в w, выполняя все замены.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/strings/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API