Пакет strings
Обзор
Пакет strings реализует простые функции для работы со строками в кодировке UTF-8.
Для получения информации о строках UTF-8 в Go, обратитесь к https://blog.golang.org/strings.
Индекс
Примеры
- Builder
- Clone
- Compare
- Contains
- ContainsAny
- ContainsFunc
- ContainsRune
- Count
- Cut
- CutPrefix
- CutSuffix
- EqualFold
- Fields
- FieldsFunc
- HasPrefix
- HasSuffix
- Index
- IndexAny
- IndexByte
- IndexFunc
- IndexRune
- Join
- LastIndex
- LastIndexAny
- LastIndexByte
- LastIndexFunc
- Map
- NewReplacer
- Repeat
- Replace
- ReplaceAll
- Split
- SplitAfter
- SplitAfterN
- SplitN
- 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 проверяет, содержится ли любой символ Unicode из набора chars в строке s.
Пример
Код:
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 := 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 проверяет, содержится ли символ Unicode r в строке s.
Пример
Код:
// 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 CutPrefix 1.20
func CutPrefix(s, prefix string) (after string, found bool)
CutPrefix возвращает строку s без заданного префикса prefix и сообщает, был ли префикс найден. Если s не начинается с prefix, CutPrefix возвращает s, false. Если prefix пустая строка, CutPrefix возвращает s, true.
Пример
Код:
show := func(s, sep string) {
after, found := strings.CutPrefix(s, sep)
fmt.Printf("CutPrefix(%q, %q) = %q, %v\n", s, sep, 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 без заданного суффикса suffix и сообщает, был ли суффикс найден. Если s не заканчивается на suffix, CutSuffix возвращает s, false. Если suffix пустая строка, CutSuffix возвращает s, true.
Пример
Код:
show := func(s, sep string) {
before, found := strings.CutSuffix(s, sep)
fmt.Printf("CutSuffix(%q, %q) = %q, %v\n", s, sep, 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 содержит только пробелы.
Пример
Код:
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) или строка пустая, возвращается пустой срез.
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), но без создания среза.
func FieldsSeq 1.24
func FieldsSeq(s string) iter.Seq[string]
FieldsSeq возвращает итератор по подстрокам s, разделенным последовательностями пробельных символов, как определено в unicode.IsSpace. Итератор возвращает те же строки, которые были бы возвращены Fields(s), но без создания среза.
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, если ни один символ из 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, если r отсутствует в 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, если ни один символ из 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 возвращает индекс в строке s последнего символа Unicode, удовлетворяющего условию 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 не заканчивается символом новой строки, последняя возвращенная строка не будет заканчиваться символом новой строки. Возвращает итератор однократного использования.
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 символов Unicode. Если 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 с количеством -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 с количеством -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 и возвращает срез этих подстрок.
Количество определяет количество подстрок для возврата:
- 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), но без построения среза. Возвращает одноразовый итератор.
func SplitN
func SplitN(s, sep string, n int) []string
SplitN разбивает s на подстроки, разделенные sep, и возвращает срез подстрок между этими разделителями.
Количество определяет количество подстрок для возврата:
- 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), но без построения среза. Возвращает одноразовый итератор.
func Title
func Title(s string) string
Title возвращает копию строки s с преобразованием всех букв Юникода, начинающих слова, в заглавные буквы Юникода.
Устарело: правило Title, используемое для границ слов, не обрабатывает правильно пунктуацию Юникода. Используйте 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 с преобразованием всех букв Юникода в нижний регистр.
Пример
Код:
fmt.Println(strings.ToLower("Gopher"))
Вывод:
gopher
func ToLowerSpecial
func ToLowerSpecial(c unicode.SpecialCase, s string) string
ToLowerSpecial возвращает копию строки s с преобразованием всех букв Юникода в нижний регистр с использованием правил преобразования, заданных c.
Пример
Код:
fmt.Println(strings.ToLowerSpecial(unicode.TurkishCase, "Örnek İş"))
Вывод:
örnek iş
func ToTitle
func ToTitle(s string) string
ToTitle возвращает копию строки s с преобразованием всех букв Юникода в заглавные буквы Юникода.
Пример
Код:
// 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 с преобразованием всех букв Юникода в заглавные буквы Юникода, отдавая приоритет специальным правилам форматирования.
Пример
Код:
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 с преобразованием всех букв Юникода в верхний регистр.
Пример
Код:
fmt.Println(strings.ToUpper("Gopher"))
Вывод:
GOPHER
func ToUpperSpecial
func ToUpperSpecial(c unicode.SpecialCase, s string) string
ToUpperSpecial возвращает копию строки s с преобразованием всех букв Юникода в верхний регистр с использованием правил преобразования, заданных 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, удаляя все ведущие и хвостовые символы Юникода, содержащиеся в cutset.
Пример
Код:
fmt.Print(strings.Trim("¡¡¡Hello, Gophers!!!", "!¡"))
Вывод:
Hello, Gophers
func TrimFunc
func TrimFunc(s string, f func(rune) bool) string
TrimFunc возвращает срез строки s, удаляя все ведущие и хвостовые символы Юникода 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, удаляя все ведущие символы Юникода, содержащиеся в cutset.
Для удаления префикса используйте TrimPrefix вместо этого.
Пример
Код:
fmt.Print(strings.TrimLeft("¡¡¡Hello, Gophers!!!", "!¡"))
Вывод:
Hello, Gophers!!!
func TrimLeftFunc
func TrimLeftFunc(s string, f func(rune) bool) string
TrimLeftFunc возвращает срез строки s, удаляя все ведущие символы Юникода 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, удаляя все хвостовые символы Юникода, содержащиеся в cutset.
Для удаления суффикса используйте TrimSuffix вместо этого.
Пример
Код:
fmt.Print(strings.TrimRight("¡¡¡Hello, Gophers!!!", "!¡"))
Вывод:
¡¡¡Hello, Gophers
func TrimRightFunc
func TrimRightFunc(s string, f func(rune) bool) string
TrimRightFunc возвращает срез строки s, удаляя все хвостовые символы Юникода 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, удаляя все ведущие и хвостовые пробелы, как определено в Юникоде.
Пример
Код:
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
тип 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 возвращает емкость базового среза байтов билдера. Это общее выделенное пространство для строке, которая строится, и включает все уже записанные байты.
func (*Builder) Grow 1.10
func (b *Builder) Grow(n int)
Grow увеличивает емкость b, если необходимо, для гарантирования места для еще n байтов. После Grow(n) по меньшей мере n байтов могут быть записаны в b без дополнительного выделения. Если 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 добавляет UTF-8 кодирование Unicode кодовой точки r в буфер b. Возвращает длину r и ошибку nil.
func (*Builder) WriteString 1.10
func (b *Builder) WriteString(s string) (int, error)
WriteString добавляет содержимое s в буфер b. Возвращает длину s и ошибку nil.
type 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.
type Replacer
Replacer выполняет замену списка строк. Безопасен для одновременного использования несколькими горутинами.
type Replacer struct {
// contains filtered or unexported fields
}
func NewReplacer
func NewReplacer(oldnew ...string) *Replacer
NewReplacer возвращает новый Replacer из списка пар старых и новых строк. Замены выполняются в порядке их появления в целевой строке без перекрытия совпадений. Сравнение старых строк выполняется в порядке аргументов.
NewReplacer вызывает панику, если получает нечётное число аргументов.
Пример
Код:
r := strings.NewReplacer("<", "<", ">", ">")
fmt.Println(r.Replace("This is <b>HTML</b>!"))
Вывод:
This is <b>HTML</b>!
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/