?
This document uses PHP Chinese website manual Release
import "strings"
概觀
索引
示例
打包字符串實(shí)現(xiàn)簡(jiǎn)單的函數(shù)來(lái)操縱 UTF-8 編碼的字符串。
func Compare(a, b string) int
func Contains(s, substr string) bool
func ContainsAny(s, chars string) bool
func ContainsRune(s string, r rune) bool
func Count(s, substr string) int
func EqualFold(s, t string) bool
func Fields(s string) []string
func FieldsFunc(s string, f func(rune) bool) []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(a []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 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 Split(s, sep string) []string
func SplitAfter(s, sep string) []string
func SplitAfterN(s, sep string, n int) []string
func SplitN(s, sep string, n int) []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 Trim(s string, cutset string) string
func TrimFunc(s string, f func(rune) bool) string
func TrimLeft(s string, cutset string) string
func TrimLeftFunc(s string, f func(rune) bool) string
func TrimPrefix(s, prefix string) string
func TrimRight(s string, cutset string) string
func TrimRightFunc(s string, f func(rune) bool) string
func TrimSpace(s string) string
func TrimSuffix(s, suffix string) string
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)
錯(cuò)誤
Compare Contains ContainsAny ContainsRune Count EqualFold Fields FieldsFunc HasPrefix HasSuffix Index IndexAny IndexByte IndexFunc IndexRune Join LastIndex LastIndexAny Map NewReplacer Repeat Replace Split SplitAfter SplitAfterN SplitN Title ToLower ToTitle ToUpper Trim TrimFunc TrimPrefix TrimSpace TrimSuffix
compare.go reader.go replace.go search.go strings.go strings_amd64.go strings_decl.go
func Compare(a, b string) int
Compare 按字典順序返回一個(gè)比較兩個(gè)字符串的整數(shù)。如果 a == b,結(jié)果將為0,如果 a <b 則返回-1,如果 a> b 則返回+1。
Compare 僅包含與封裝字節(jié)的對(duì)稱(chēng)性。使用內(nèi)置的字符串比較運(yùn)算符 ==,<,> 等通常會(huì)更清晰并且速度更快。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Compare("a", "b")) fmt.Println(strings.Compare("a", "a")) fmt.Println(strings.Compare("b", "a"))}
func Contains(s, substr string) bool
包含報(bào)告 substr 是否在 s 之內(nèi)。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Contains("seafood", "foo")) fmt.Println(strings.Contains("seafood", "bar")) fmt.Println(strings.Contains("seafood", "")) fmt.Println(strings.Contains("", ""))}
func ContainsAny(s, chars string) bool
ContainsAny 報(bào)告字符中的任何 Unicode 代碼點(diǎn)是否在 s 中。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.ContainsAny("team", "i")) fmt.Println(strings.ContainsAny("failure", "u & i")) fmt.Println(strings.ContainsAny("foo", "")) fmt.Println(strings.ContainsAny("", ""))}
func ContainsRune(s string, r rune) bool
ContainsRune 報(bào)告 Unicode 代碼點(diǎn) r 是否在 s 內(nèi)。
package mainimport ("fmt""strings")func main() {// 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))}
func Count(s, substr string) int
Count 計(jì)算 s 中不重疊的 substr 實(shí)例的數(shù)量。如果 substr 是一個(gè)空字符串,則 Count 將返回 1 + s 中的 Unicode 代碼點(diǎn)數(shù)。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Count("cheese", "e")) fmt.Println(strings.Count("five", "")) // before & after each rune}
func EqualFold(s, t string) bool
EqualFold 報(bào)告 s 和 t,解釋為 UTF-8 字符串,在 Unicode 大小寫(xiě)折疊下是否相等。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.EqualFold("Go", "go"))}
func Fields(s string) []string
Fields 將字符串 s 分割為一個(gè)或多個(gè)連續(xù)的空格字符的每個(gè)實(shí)例,由 unicode.IsSpace 定義,如果 s 僅包含空格,則返回 s 的子字符串?dāng)?shù)組或空列表。
package mainimport ("fmt""strings")func main() { fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz "))}
func FieldsFunc(s string, f func(rune) bool) []string
FieldsFunc 在每次運(yùn)行滿(mǎn)足 f(c) 的 Unicode 代碼點(diǎn) c 時(shí)分割字符串 s ,并返回一組 s 片段。如果 s 中的所有代碼點(diǎn)都滿(mǎn)足 f(c) 或者字符串為空,則返回空片。FieldsFunc 不保證它調(diào)用 f(c) 的順序。如果f沒(méi)有為給定的c返回一致的結(jié)果,那么 FieldsFunc 可能會(huì)崩潰。
package mainimport ("fmt""strings""unicode")func main() { f := func(c rune) bool {return !unicode.IsLetter(c) && !unicode.IsNumber(c)} fmt.Printf("Fields are: %q", strings.FieldsFunc(" foo1;bar2,baz3...", f))}
func HasPrefix(s, prefix string) bool
HasPrefix 測(cè)試字符串 s 是否以前綴開(kāi)頭。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.HasPrefix("Gopher", "Go")) fmt.Println(strings.HasPrefix("Gopher", "C")) fmt.Println(strings.HasPrefix("Gopher", ""))}
func HasSuffix(s, suffix string) bool
HasSuffix 測(cè)試字符串 s 是否以后綴結(jié)尾。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.HasSuffix("Amigo", "go")) fmt.Println(strings.HasSuffix("Amigo", "O")) fmt.Println(strings.HasSuffix("Amigo", "Ami")) fmt.Println(strings.HasSuffix("Amigo", ""))}
func Index(s, substr string) int
索引返回 s 中第一個(gè) substr 實(shí)例的索引,如果 substr 不存在于 s 中,則返回-1。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Index("chicken", "ken")) fmt.Println(strings.Index("chicken", "dmr"))}
func IndexAny(s, chars string) int
IndexAny 返回 s 中任何 Unicode 代碼點(diǎn)的第一個(gè)實(shí)例的索引,如果沒(méi)有來(lái)自 chars 的 Unicode 代碼點(diǎn),則返回-1。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.IndexAny("chicken", "aeiouy")) fmt.Println(strings.IndexAny("crwth", "aeiouy"))}
func IndexByte(s string, c byte) int
IndexByte 返回 s 的第一個(gè)實(shí)例的索引,如果 c 不存在于 s 中,則返回-1。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.IndexByte("golang", 'g')) fmt.Println(strings.IndexByte("gophers", 'h')) fmt.Println(strings.IndexByte("golang", 'x'))}
func IndexFunc(s string, f func(rune) bool) int
IndexFunc 將索引返回到滿(mǎn)足 f(c) 的第一個(gè) Unicode 代碼點(diǎn)的 s 中,否則返回-1。
package mainimport ("fmt""strings""unicode")func main() { f := func(c rune) bool {return unicode.Is(unicode.Han, c)} fmt.Println(strings.IndexFunc("Hello, 世界", f)) fmt.Println(strings.IndexFunc("Hello, world", f))}
func IndexRune(s string, r rune) int
IndexRune 返回 Unicode 代碼點(diǎn) r 的第一個(gè)實(shí)例的索引,如果符號(hào)不存在于 s 中,則返回-1。如果 r 是 utf8.RuneError ,它將返回任何無(wú)效的 UTF-8 字節(jié)序列的第一個(gè)實(shí)例。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.IndexRune("chicken", 'k')) fmt.Println(strings.IndexRune("chicken", 'd'))}
func Join(a []string, sep string) string
Join 連接 a 的元素以創(chuàng)建單個(gè)字符串。分隔符字符串 sep 放置在結(jié)果字符串中的元素之間。
package mainimport ("fmt""strings")func main() { s := []string{"foo", "bar", "baz"} fmt.Println(strings.Join(s, ", "))}
func LastIndex(s, substr string) int
LastIndex 返回 s 中最后一個(gè) substr 實(shí)例的索引,如果 substr 不存在于 s 中,則返回-1。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Index("go gopher", "go")) fmt.Println(strings.LastIndex("go gopher", "go")) fmt.Println(strings.LastIndex("go gopher", "rodent"))}
func LastIndexAny(s, chars string) int
LastIndexAny 返回來(lái)自 s 中字符的任何 Unicode 代碼點(diǎn)的最后一個(gè)實(shí)例的索引,如果沒(méi)有來(lái)自 chars 的 Unicode 代碼點(diǎn)存在于 s 中,則返回-1。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.LastIndexAny("go gopher", "go")) fmt.Println(strings.LastIndexAny("go gopher", "rodent")) fmt.Println(strings.LastIndexAny("go gopher", "fail"))}
func LastIndexByte(s string, c byte) int
LastIndexByte 返回 s 的最后一個(gè)實(shí)例的索引,如果 c 不存在于 s 中,則返回-1。
func LastIndexFunc(s string, f func(rune) bool) int
LastIndexFunc 將索引返回到滿(mǎn)足 f(c) 的最后一個(gè) Unicode 代碼點(diǎn)的 s 中,否則返回-1。
func Map(mapping func(rune) rune, s string) string
Map 根據(jù)映射函數(shù)返回字符串 s 的一個(gè)副本,并修改其所有字符。如果映射返回負(fù)值,則字符將從字符串中刪除而不會(huì)被替換。
package mainimport ("fmt""strings")func main() { rot13 := func(r rune) rune {switch {case r >= 'A' && r <= 'Z':return 'A' + (r-'A'+13)%26case r >= 'a' && r <= 'z':return 'a' + (r-'a'+13)%26}return r} fmt.Println(strings.Map(rot13, "'Twas brillig and the slithy gopher..."))}
func Repeat(s string, count int) string
Repeat 返回一個(gè)由字符串 s 的計(jì)數(shù)副本組成的新字符串。
如果count為負(fù)數(shù)或(len(s)* count)的結(jié)果溢出,它會(huì)發(fā)生混亂。
package mainimport ("fmt""strings")func main() { fmt.Println("ba" + strings.Repeat("na", 2))}
func Replace(s, old, new string, n int) string
Replace 返回字符串s的一個(gè)副本,其中前 n 個(gè)不重疊的舊實(shí)例由 new 替換。如果 old 為空,則它在字符串的開(kāi)始處和每個(gè) UTF-8 序列之后進(jìn)行匹配,最多生成一個(gè) k-1 字符串的 k+1 替換。如果 n <0,則替換次數(shù)沒(méi)有限制。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))}
func Split(s, sep string) []string
將切片分割成由 sep 分隔的所有子字符串,并在這些分隔符之間返回一個(gè)子切片片段。
如果 s 不包含 sep 且 sep 不為空,則 Split 將返回長(zhǎng)度為1的片段,其唯一元素為 s。
如果 sep 為空,Split 會(huì)在每個(gè) UTF-8 序列之后分裂。如果 s 和 sep 都為空,Split 將返回一個(gè)空片。
它相當(dāng)于 SplitN,計(jì)數(shù)為-1。
package mainimport ("fmt""strings")func main() { 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"))}
func SplitAfter(s, sep string) []string
SplitAfter 在每個(gè) sep 實(shí)例之后切片到所有子字符串中,并返回這些子字符串的一部分。
如果 s 不包含 sep 且 sep 不為空,則 SplitAfter 將返回長(zhǎng)度為1的片段,其唯一元素為 s。
如果 sep 為空,則 SplitAfter 會(huì)在每個(gè) UTF-8 序列后分割。如果 s 和 sep 均為空,則 SplitAfter 將返回空片。
它相當(dāng)于 SplitAfterN,計(jì)數(shù)為-1。
package mainimport ("fmt""strings")func main() { fmt.Printf("%q\n", strings.SplitAfter("a,b,c", ","))}
func SplitAfterN(s, sep string, n int) []string
在每個(gè) sep 實(shí)例之后,SplitAfterN 將 s 切成子字符串,并返回這些子字符串的一部分。
計(jì)數(shù)決定要返回的子字符串的數(shù)量:
n > 0: at most n substrings; the last substring will be the unsplit remainder.n == 0: the result is nil (zero substrings)n < 0: all substrings
s 和 sep 的邊緣情況(例如,空字符串)按照 SplitAfter 文檔中的描述進(jìn)行處理。
package mainimport ("fmt""strings")func main() { fmt.Printf("%q\n", strings.SplitAfterN("a,b,c", ",", 2))}
func SplitN(s, sep string, n int) []string
將 SplitN 切片分割成由 sep 分隔的子字符串,并返回這些分隔符之間的一個(gè)子字符串片段。
計(jì)數(shù)決定要返回的子字符串的數(shù)量:
n > 0: at most n substrings; the last substring will be the unsplit remainder.n == 0: the result is nil (zero substrings)n < 0: all substrings
s 和 sep 的邊緣情況(例如,空字符串)按照 Split 的文檔中的描述進(jìn)行處理。
package mainimport ("fmt""strings")func main() { 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)}
func Title(s string) string
標(biāo)題返回字符串 s 的一個(gè)副本,其中所有的 Unicode 字母開(kāi)始將單詞映射到其標(biāo)題大小寫(xiě)。
BUG(rsc):規(guī)則標(biāo)題用于單詞邊界的規(guī)則不能正確處理 Unicode 標(biāo)點(diǎn)符號(hào)。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Title("her royal highness"))}
func ToLower(s string) string
ToLower 返回字符串 s 的一個(gè)副本,其中所有 Unicode 字母映射為小寫(xiě)字母。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.ToLower("Gopher"))}
func ToLowerSpecial(c unicode.SpecialCase, s string) string
ToLowerSpecial 返回字符串 s 的一個(gè)副本,其中所有的 Unicode 字母都映射到它們的小寫(xiě)字母,優(yōu)先考慮特殊的外殼規(guī)則。
func ToTitle(s string) string
ToTitle 返回字符串 s 的一個(gè)副本,其中所有 Unicode 字母映射到它們的標(biāo)題大小寫(xiě)。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.ToTitle("loud noises")) fmt.Println(strings.ToTitle("хлеб"))}
func ToTitleSpecial(c unicode.SpecialCase, s string) string
ToTitleSpecial 返回字符串 s 的副本,其中所有的 Unicode 字母映射到它們的標(biāo)題大小寫(xiě),優(yōu)先考慮特殊的外殼規(guī)則。
func ToUpper(s string) string
ToUpper 返回字符串 s 的副本,其中所有的 Unicode 字母都映射為大寫(xiě)字母。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.ToUpper("Gopher"))}
func ToUpperSpecial(c unicode.SpecialCase, s string) string
ToUpperSpecial 返回字符串 s 的副本,其中所有的 Unicode 字母映射為大寫(xiě)字母,優(yōu)先考慮特殊的外殼規(guī)則。
func Trim(s string, cutset string) string
Trim 將返回字符串 s 的一部分,并將 cutset 中包含的所有前導(dǎo)和尾部 Unicode 代碼點(diǎn)刪除。
package mainimport ("fmt""strings")func main() { fmt.Printf("[%q]", strings.Trim(" !!! Achtung! Achtung! !!! ", "! "))}
func TrimFunc(s string, f func(rune) bool) string
TrimFunc 返回字符串 s 的一個(gè)片段,其中所有前導(dǎo)和尾隨 Unicode 代碼點(diǎn) c 都滿(mǎn)足 f(c)。
package mainimport ("fmt""strings""unicode")func main() { f := func(c rune) bool {return !unicode.IsLetter(c) && !unicode.IsNumber(c)} fmt.Printf("[%q]", strings.TrimFunc(" Achtung1! Achtung2,...", f))}
func TrimLeft(s string, cutset string) string
TrimLeft 返回 cutset 中包含的所有前導(dǎo) Unicode 代碼點(diǎn)被刪除的字符串 s 的一部分。
func TrimLeftFunc(s string, f func(rune) bool) string
TrimLeftFunc 返回字符串 s 的一部分,其中所有前導(dǎo) Unicode 代碼點(diǎn) c 滿(mǎn)足 f(c)。
func TrimPrefix(s, prefix string) string
TrimPrefix 在沒(méi)有提供的前導(dǎo)前綴字符串的情況下返回 s。如果 s 不是以前綴開(kāi)始,則 s 不變。
package mainimport ("fmt""strings")func main() {var s = "Goodbye,, world!" s = strings.TrimPrefix(s, "Goodbye,") s = strings.TrimPrefix(s, "Howdy,") fmt.Print("Hello" + s)}
func TrimRight(s string, cutset string) string
TrimRight 返回字符串 s 的一部分,刪除 cutset 中包含的所有尾部 Unicode 代碼點(diǎn)。
func TrimRightFunc(s string, f func(rune) bool) string
TrimRightFunc 返回字符串 s 的一個(gè)片段,其中所有的尾隨 Unicode 代碼點(diǎn) c 滿(mǎn)足 f(c) 。
func TrimSpace(s string) string
TrimSpace 返回字符串 s 的一部分,刪除所有前導(dǎo)和尾部空白,如 Unicode 定義的。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.TrimSpace(" \t\n a lone gopher \n\t\r\n"))}
func TrimSuffix(s, suffix string) string
TrimSuffix 在沒(méi)有提供尾隨后綴字符串的情況下返回 s。如果 s 不以后綴結(jié)尾,則 s 不變。
package mainimport ("fmt""strings")func main() {var s = "Hello, goodbye, etc!" s = strings.TrimSuffix(s, "goodbye, etc!") s = strings.TrimSuffix(s, "planet") fmt.Print(s, "world!")}
Reader 通過(guò)讀取字符串來(lái)實(shí)現(xiàn) io.Reader,io.ReaderAt,io.Seeker,io.WriterTo,io.ByteScanner 和 io.RuneScanner 接口。
type Reader struct { // contains filtered or unexported fields}
func NewReader(s string) *Reader
NewReader 從 s 中返回一個(gè)新的 Reader 讀數(shù)。它與 bytes.NewBufferString 類(lèi)似,但更高效且只讀。
func (r *Reader) Len() int
Len 返回字符串未讀部分的字節(jié)數(shù)。
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)
重置將讀取器重置為從 s 讀取。
func (r *Reader) Seek(offset int64, whence int) (int64, error)
Seek 實(shí)現(xiàn)了 io.Seeker 接口。
func (r *Reader) Size() int64
Size 返回基礎(chǔ)字符串的原始長(zhǎng)度。Size 是可通過(guò) ReadAt 讀取的字節(jié)數(shù)。返回的值總是相同的,不受調(diào)用任何其他方法的影響。
func (r *Reader) UnreadByte() error
func (r *Reader) UnreadRune() error
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
WriteTo 實(shí)現(xiàn) io.WriterTo 接口。
Replacer 用替換替換字符串列表。由多個(gè) goroutines 并行使用是安全的。
type Replacer struct { // contains filtered or unexported fields}
func NewReplacer(oldnew ...string) *Replacer
NewReplacer 從舊的新的字符串對(duì)列表中返回一個(gè)新的 Replacer。按順序執(zhí)行替換,不會(huì)有重疊匹配。
package mainimport ("fmt""strings")func main() { r := strings.NewReplacer("<", "<", ">", ">") fmt.Println(r.Replace("This is <b>HTML</b>!"))}
func (r *Replacer) Replace(s string) string
Replace 返回執(zhí)行所有替換的s的副本。
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
WriteString 將 s 寫(xiě)入 w 并執(zhí)行所有替換。
? 標(biāo)題用于單詞邊界的規(guī)則不能正確處理 Unicode 標(biāo)點(diǎn)符號(hào)。