?
本文檔使用 php中文網手冊 發(fā)布
import "strings"
概觀
索引
示例
打包字符串實現(xiàn)簡單的函數(shù)來操縱 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)
錯誤
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 按字典順序返回一個比較兩個字符串的整數(shù)。如果 a == b,結果將為0,如果 a <b 則返回-1,如果 a> b 則返回+1。
Compare 僅包含與封裝字節(jié)的對稱性。使用內置的字符串比較運算符 ==,<,> 等通常會更清晰并且速度更快。
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
包含報告 substr 是否在 s 之內。
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 報告字符中的任何 Unicode 代碼點是否在 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 報告 Unicode 代碼點 r 是否在 s 內。
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 計算 s 中不重疊的 substr 實例的數(shù)量。如果 substr 是一個空字符串,則 Count 將返回 1 + s 中的 Unicode 代碼點數(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 報告 s 和 t,解釋為 UTF-8 字符串,在 Unicode 大小寫折疊下是否相等。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.EqualFold("Go", "go"))}
func Fields(s string) []string
Fields 將字符串 s 分割為一個或多個連續(xù)的空格字符的每個實例,由 unicode.IsSpace 定義,如果 s 僅包含空格,則返回 s 的子字符串數(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 在每次運行滿足 f(c) 的 Unicode 代碼點 c 時分割字符串 s ,并返回一組 s 片段。如果 s 中的所有代碼點都滿足 f(c) 或者字符串為空,則返回空片。FieldsFunc 不保證它調用 f(c) 的順序。如果f沒有為給定的c返回一致的結果,那么 FieldsFunc 可能會崩潰。
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 測試字符串 s 是否以前綴開頭。
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 測試字符串 s 是否以后綴結尾。
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 中第一個 substr 實例的索引,如果 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 代碼點的第一個實例的索引,如果沒有來自 chars 的 Unicode 代碼點,則返回-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 的第一個實例的索引,如果 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 將索引返回到滿足 f(c) 的第一個 Unicode 代碼點的 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 代碼點 r 的第一個實例的索引,如果符號不存在于 s 中,則返回-1。如果 r 是 utf8.RuneError ,它將返回任何無效的 UTF-8 字節(jié)序列的第一個實例。
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)建單個字符串。分隔符字符串 sep 放置在結果字符串中的元素之間。
package mainimport ("fmt""strings")func main() { s := []string{"foo", "bar", "baz"} fmt.Println(strings.Join(s, ", "))}
func LastIndex(s, substr string) int
LastIndex 返回 s 中最后一個 substr 實例的索引,如果 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 返回來自 s 中字符的任何 Unicode 代碼點的最后一個實例的索引,如果沒有來自 chars 的 Unicode 代碼點存在于 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 的最后一個實例的索引,如果 c 不存在于 s 中,則返回-1。
func LastIndexFunc(s string, f func(rune) bool) int
LastIndexFunc 將索引返回到滿足 f(c) 的最后一個 Unicode 代碼點的 s 中,否則返回-1。
func Map(mapping func(rune) rune, s string) string
Map 根據映射函數(shù)返回字符串 s 的一個副本,并修改其所有字符。如果映射返回負值,則字符將從字符串中刪除而不會被替換。
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 返回一個由字符串 s 的計數(shù)副本組成的新字符串。
如果count為負數(shù)或(len(s)* count)的結果溢出,它會發(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的一個副本,其中前 n 個不重疊的舊實例由 new 替換。如果 old 為空,則它在字符串的開始處和每個 UTF-8 序列之后進行匹配,最多生成一個 k-1 字符串的 k+1 替換。如果 n <0,則替換次數(shù)沒有限制。
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 分隔的所有子字符串,并在這些分隔符之間返回一個子切片片段。
如果 s 不包含 sep 且 sep 不為空,則 Split 將返回長度為1的片段,其唯一元素為 s。
如果 sep 為空,Split 會在每個 UTF-8 序列之后分裂。如果 s 和 sep 都為空,Split 將返回一個空片。
它相當于 SplitN,計數(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 在每個 sep 實例之后切片到所有子字符串中,并返回這些子字符串的一部分。
如果 s 不包含 sep 且 sep 不為空,則 SplitAfter 將返回長度為1的片段,其唯一元素為 s。
如果 sep 為空,則 SplitAfter 會在每個 UTF-8 序列后分割。如果 s 和 sep 均為空,則 SplitAfter 將返回空片。
它相當于 SplitAfterN,計數(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
在每個 sep 實例之后,SplitAfterN 將 s 切成子字符串,并返回這些子字符串的一部分。
計數(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 文檔中的描述進行處理。
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 分隔的子字符串,并返回這些分隔符之間的一個子字符串片段。
計數(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 的文檔中的描述進行處理。
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
標題返回字符串 s 的一個副本,其中所有的 Unicode 字母開始將單詞映射到其標題大小寫。
BUG(rsc):規(guī)則標題用于單詞邊界的規(guī)則不能正確處理 Unicode 標點符號。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.Title("her royal highness"))}
func ToLower(s string) string
ToLower 返回字符串 s 的一個副本,其中所有 Unicode 字母映射為小寫字母。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.ToLower("Gopher"))}
func ToLowerSpecial(c unicode.SpecialCase, s string) string
ToLowerSpecial 返回字符串 s 的一個副本,其中所有的 Unicode 字母都映射到它們的小寫字母,優(yōu)先考慮特殊的外殼規(guī)則。
func ToTitle(s string) string
ToTitle 返回字符串 s 的一個副本,其中所有 Unicode 字母映射到它們的標題大小寫。
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 字母映射到它們的標題大小寫,優(yōu)先考慮特殊的外殼規(guī)則。
func ToUpper(s string) string
ToUpper 返回字符串 s 的副本,其中所有的 Unicode 字母都映射為大寫字母。
package mainimport ("fmt""strings")func main() { fmt.Println(strings.ToUpper("Gopher"))}
func ToUpperSpecial(c unicode.SpecialCase, s string) string
ToUpperSpecial 返回字符串 s 的副本,其中所有的 Unicode 字母映射為大寫字母,優(yōu)先考慮特殊的外殼規(guī)則。
func Trim(s string, cutset string) string
Trim 將返回字符串 s 的一部分,并將 cutset 中包含的所有前導和尾部 Unicode 代碼點刪除。
package mainimport ("fmt""strings")func main() { fmt.Printf("[%q]", strings.Trim(" !!! Achtung! Achtung! !!! ", "! "))}
func TrimFunc(s string, f func(rune) bool) string
TrimFunc 返回字符串 s 的一個片段,其中所有前導和尾隨 Unicode 代碼點 c 都滿足 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 中包含的所有前導 Unicode 代碼點被刪除的字符串 s 的一部分。
func TrimLeftFunc(s string, f func(rune) bool) string
TrimLeftFunc 返回字符串 s 的一部分,其中所有前導 Unicode 代碼點 c 滿足 f(c)。
func TrimPrefix(s, prefix string) string
TrimPrefix 在沒有提供的前導前綴字符串的情況下返回 s。如果 s 不是以前綴開始,則 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 代碼點。
func TrimRightFunc(s string, f func(rune) bool) string
TrimRightFunc 返回字符串 s 的一個片段,其中所有的尾隨 Unicode 代碼點 c 滿足 f(c) 。
func TrimSpace(s string) string
TrimSpace 返回字符串 s 的一部分,刪除所有前導和尾部空白,如 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 在沒有提供尾隨后綴字符串的情況下返回 s。如果 s 不以后綴結尾,則 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 通過讀取字符串來實現(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 中返回一個新的 Reader 讀數(shù)。它與 bytes.NewBufferString 類似,但更高效且只讀。
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 實現(xiàn)了 io.Seeker 接口。
func (r *Reader) Size() int64
Size 返回基礎字符串的原始長度。Size 是可通過 ReadAt 讀取的字節(jié)數(shù)。返回的值總是相同的,不受調用任何其他方法的影響。
func (r *Reader) UnreadByte() error
func (r *Reader) UnreadRune() error
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
WriteTo 實現(xiàn) io.WriterTo 接口。
Replacer 用替換替換字符串列表。由多個 goroutines 并行使用是安全的。
type Replacer struct { // contains filtered or unexported fields}
func NewReplacer(oldnew ...string) *Replacer
NewReplacer 從舊的新的字符串對列表中返回一個新的 Replacer。按順序執(zhí)行替換,不會有重疊匹配。
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 寫入 w 并執(zhí)行所有替換。
? 標題用于單詞邊界的規(guī)則不能正確處理 Unicode 標點符號。