go標準庫的學習-strings-字符串操做

參考https://studygolang.com/pkgdocgolang

導入方式:後端

import "strings"

strings包實現了用於操做字符的簡單函數。數組

 

經常使用的幾個函數:函數

func Contains

func Contains(s, substr string) bool

判斷字符串s是否包含子串substr。spa

舉例:指針

package main 
import(
    "fmt"
    "strings"

)

func main() {
    fmt.Println(strings.Contains("seafood", "foo")) //true
    fmt.Println(strings.Contains("seafood", "bar")) //false
    fmt.Println(strings.Contains("seafood", "")) //true
    fmt.Println(strings.Contains("", "")) //true
}

 

func Index

func Index(s, sep string) int

子串sep在字符串s中第一次出現的位置,不存在則返回-1。code

舉例:blog

package main 
import(
    "fmt"
    "strings"

)

func main() {
    fmt.Println(strings.Index("chicken", "ken")) //4
    fmt.Println(strings.Index("chicken", "dmr")) //-1
}

 

func Join

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

將一系列字符串鏈接爲一個字符串,之間用sep來分隔。接口

舉例:utf-8

package main 
import(
    "fmt"
    "strings"

)

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

 

func Repeat

func Repeat(s string, count int) string

返回count個s串聯的字符串。

舉例:

package main 
import(
    "fmt"
    "strings"

)

func main() {
    fmt.Println("ba" + strings.Repeat("na", 2)) //banana
}

 

func Replace

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

返回將s中前n個不重疊old子串都替換爲new的新字符串,若是n<0會替換全部old子串。

舉例:

package main 
import(
    "fmt"
    "strings"

)

func main() {
    fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) //oinky oinky oink
    fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) //moo moo moo
}

 

func Split

func Split(s, sep string) []string

用去掉s中出現的sep的方式進行分割,會分割到結尾,並返回生成的全部片斷組成的切片(每個sep都會進行一次切割,即便兩個sep相鄰,也會進行兩次切割)。若是sep爲空字符,Split會將s切分紅每個unicode碼值一個字符串。

舉例:

package main 
import(
    "fmt"
    "strings"

)

func main() {
    fmt.Printf("%q\n", strings.Split("a,b,c", ",")) //["a" "b" "c"]
    fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) //["" "man " "plan " "canal panama"]
    fmt.Printf("%q\n", strings.Split(" xyz ", "")) //[" " "x" "y" "z" " "]
    fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins")) //[""]
}

 

 

func Trim

func Trim(s string, cutset string) string

返回將s先後端全部cutset包含的utf-8碼值都去掉的字符串。

舉例:

package main 
import(
    "fmt"
    "strings"

)

func main() {
    fmt.Printf("[%q]\n", strings.Trim(" !!! Achtung! Achtung! !!! ", "! ")) //["Achtung! Achtung"]
}

 

func Fields

func Fields(s string) []string

返回將字符串按照空白(unicode.IsSpace肯定,能夠是一到多個連續的空白字符)分割的多個字符串。若是字符串所有是空白或者是空字符串的話,會返回空切片。

舉例:

package main 
import(
    "fmt"
    "strings"

)

func main() {
    fmt.Printf("Fields are: %q\n", strings.Fields("  foo bar  baz   ")) //Fields are: ["foo" "bar" "baz"]
}

 

)type Reader

type Reader struct { s string i int64 // current reading index prevRune int // index of previous rune; or < 0

Reader類型經過從一個字符串讀取數據,實現了io.Reader、io.Seeker、io.ReaderAt、io.WriterTo、io.ByteScanner、io.RuneScanner接口。

實現源碼:

1> func NewReader

func NewReader(s string) *Reader

NewReader建立一個從s讀取數據的Reader。本函數相似bytes.NewBufferString,可是更有效率,且爲只讀的。

該初始化源碼:

func NewReader(s string) *Reader { return &Reader{s, 0, -1} }

舉例:

package main 
import(
    "fmt" "io" "strings" "os" ) func main() { reader := strings.NewReader("test reader's usage") buf := make([]byte, 4) //生成一個可以存放4 bytes數據的數組 for {//無限循環直至有錯或數據讀取完返回EOF count, err := reader.Read(buf)//後面讀取的內容會覆蓋前面的buf的內容 if err != nil { if err == io.EOF { fmt.Println("EOF : ", count) break } fmt.Println(err) os.Exit(1) } fmt.Println(count, string(buf[:count])) } }

返回:

userdeMBP:src user$ go run test.go
4 test 4 rea 4 der' 4 s us 3 age EOF : 0

 

2》func (*Reader) Len

func (r *Reader) Len() int

Len返回r包含的字符串尚未被讀取的部分,即當前文件指針以後的內容

3》func (*Reader) Read

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

4》func (*Reader) ReadByte

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

5》func (*Reader) UnreadByte

func (r *Reader) UnreadByte() error

6》func (*Reader) ReadRune

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

7》func (*Reader) UnreadRune

func (r *Reader) UnreadRune() error

8》func (*Reader) ReadAt

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

9》func (*Reader) WriteTo

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

WriteTo實現了io.WriterTo接口。

舉例:

package main 
import(
    "fmt" "strings" "log" "os" ) func main() { fmt.Println("1 - test Read") reader := strings.NewReader("test strings's NewReader() and the usage of its function\n") len := reader.Len() fmt.Printf("1 before - the length of the part have not beed read : %d\n", len) data := make([]byte, 8) number, err := reader.Read(data) if err != nil { log.Fatal(err) } len = reader.Len() fmt.Printf("1 after - the length of the part have not beed read : %d\n", len) fmt.Println(string(data[:number])) fmt.Println("2 - test ReadByte") for i := 0; i < 3; i++ { readbyte, err := reader.ReadByte()//從當前文件指針向後讀取一個byte的內容 if err != nil { log.Fatal(err) } fmt.Print(readbyte, " ") } fmt.Println() len = reader.Len() fmt.Printf("2 after - the length of the part have not beed read : %d\n", len) fmt.Println("3 - test UnreadByte") //就至關於撤銷以前的一次ReadByte()操做,文件指針向前移一位 err = reader.UnreadByte() if err != nil { log.Fatal(err) } len = reader.Len() fmt.Printf("3 after - the length of the part have not beed read : %d\n", len) fmt.Println("4 - test ReadAt") number1, err := reader.ReadAt(data, 11) if err != nil { log.Fatal(err) } len = reader.Len() fmt.Printf("4 after - the length of the part have not beed read : %d\n", len) fmt.Println(string(data[:number1])) fmt.Println("5 - test ReadRune") for i := 0; i < 3; i++ { readrune, _, err := reader.ReadRune()//從當前文件指針向後讀取一個rune的內容 if err != nil { log.Fatal(err) } fmt.Print(readrune, " ") // fmt.Print(readrune)  } fmt.Println() len = reader.Len() fmt.Printf("5 after - the length of the part have not beed read : %d\n", len) fmt.Println("6 - test UnreadRune") err = reader.UnreadRune() //就至關於撤銷以前的一次ReadByte()操做,文件指針向前移一位 if err != nil { log.Fatal(err) } len = reader.Len() fmt.Printf("6 after - the length of the part have not beed read : %d\n", len) fmt.Println("test WriterTo") number3, err := reader.WriteTo(os.Stdout)//從當前指針開始將文件內容輸出到os.Stdout,即標準輸出中 if err != nil { log.Fatal(err) } fmt.Println(number3) }

返回:

userdeMBP:src user$ go run test.go
1 - test Read 1 before - the length of the part have not beed read : 57 1 after - the length of the part have not beed read : 49 test str 2 - test ReadByte 105 110 103 //即ing 2 after - the length of the part have not beed read : 46 3 - test UnreadByte 3 after - the length of the part have not beed read : 47 4 - test ReadAt 4 after - the length of the part have not beed read : 47 s's NewR 5 - test ReadRune 103 115 39 //即gs' 5 after - the length of the part have not beed read : 44 6 - test UnreadRune 6 after - the length of the part have not beed read : 45 test WriterTo 's NewReader() and the usage of its function 45

 未完待續

相關文章
相關標籤/搜索