针对golang中的字符串的介绍,提供了一些常用的函数和方法
package main import ( "fmt" "strings" ) func main() { s1 := "abc" s2 := "ABC" s3 := s1 + s2 s4 := `hello ` fmt.Println("s3:", s3) //abcABC fmt.Println("s4:", s4) // hello fmt.Println("HasPrefix is") //true fmt.Println(strings.HasPrefix(s3, "a")) //判断前缀 fmt.Println("HasSuffix is")//false fmt.Println(strings.HasSuffix(s3, "0")) //判断后缀 fmt.Println("Contains is")//false fmt.Println(strings.Contains(s3, "9")) //字符串包含关系 fmt.Println("Index is")//-1 fmt.Println(strings.Index(s3, "0")) //判断子字符串或字符在父字符串中出现的位置(索引) fmt.Println("LastIndex is")//-1 fmt.Println(strings.LastIndex(s3, "0")) //最后出现位置的索引 fmt.Println("Replace is")//abcABC fmt.Println(strings.Replace(s3,"0","1",-1))//如果 n = -1 则替换所有字符串 fmt.Println("Count is")//0 fmt.Println(strings.Count(s3,"0"))//出现的非重叠次数 fmt.Println("Repeat is") //abcABCabcABC fmt.Println(strings.Repeat(s3,2))//重复字符串 fmt.Println("ToLower is")//abcabc fmt.Println(strings.ToLower(s3))//修改字符串大小写 fmt.Println("ToUpper is")//ABCABC fmt.Println(strings.ToUpper(s3))//修改字符串大小写 fmt.Println("TrimSpace is")//abcABC fmt.Println(strings.TrimSpace(s3))//修剪字符串 去掉开头和结尾空格 fmt.Println("Trim is")//bcABC fmt.Println(strings.Trim(strings.TrimSpace(s3),"a"))//修剪字符串 去掉开头和结尾字符串 }
Reader and Replacer
func NewReader(s string) *Reader
通过读取一个字符串之后返回Reader对象,然后实现io.Reader, io.ReaderAt, io.Seeker, io.ByteScanner, 和io.RuneScanner 接口
package main import ( "fmt" "reflect" "strings" ) func main() { reader := strings.NewReader("widuu web") fmt.Println(reflect.TypeOf(reader)) //类型 *strings.Reader fmt.Println(reader.Len()) //9 }
注: reader.Len 实现读取字符串的数(包含空格)
func (r *Reader) Read(b []byte) (n int, err error)
读取数据到b中,返回读取的实际大小n,如果出错返回err,例如EOF或者b的长度为0
package main import ( "fmt" "strings" ) func main() { reader := strings.NewReader("hello widuu web") n, err := reader.Read(make([]byte, 10)) if err != nil { fmt.Println(err) } fmt.Println(n) //10 }
func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
package main import ( "fmt" "strings" ) func main() { reader := strings.NewReader("hello web") b := make([]byte, 10) n, err := reader.ReadAt(b, 2) if err != nil { fmt.Println(err) } fmt.Println(string(b[:n])) //llo web }
func (r *Reader) ReadByte() (b byte, err error)
读取一个byte数据,然后返回的直接就是byte
package main import ( "fmt" "strings" ) func main() { reader := strings.NewReader("hello web") data, err := reader.ReadByte() if err == nil { fmt.Println(string(data)) return } fmt.Println(err) //返回一个字节h }
func (r *Reader) ReadRune() (ch rune, size int, err error)
返回的是一个rune类型的
package main import ( "fmt" "strings" ) func main() { reader := strings.NewReader("hello web") r, n, err := reader.ReadRune() if err != nil { fmt.Println(err) } fmt.Println(string(r), n) //h,1 }
func (r *Reader) Seek(offset int64, whence int) (int64, error)
根据whence来移动offset,改变指针的
package main import ( "fmt" "strings" ) func main() { reader := strings.NewReader("hello web") b := make([]byte, 8) n, _ := reader.Read(b) fmt.Println(string(b[:n])) //hello we 这个时候没有读到要读d reader.Seek(2, 1) //这个时候我们在读取位置 偏移2 n1, _ := reader.Read(b) fmt.Println(string(b[:n1])) //u }
func (r *Reader) UnreadByte() error
当前读取的位置向前移一个byte
package main import ( "fmt" "strings" ) func main() { reader := strings.NewReader("hello world") b := make([]byte, 8) n, _ := reader.Read(b) fmt.Println(string(b[:n])) //hello wo 这个时候没有读到要读d reader.Seek(2, 1) //这个时候我们在读取位置 偏移2 reader.UnreadByte() //然后向前偏移1字节 n1, _ := reader.Read(b) fmt.Println(string(b[:n1])) //ld }
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
这个接口主要继承了io.Write的功能
package main import ( "fmt" "os" "strings" ) func main() { reader := strings.NewReader("hello world") w, _ := os.Create("test.txt") defer w.Close() n, err := reader.WriteTo(w) if err != nil { fmt.Println(err) } fmt.Println(n) //11 }
func NewReplacer(oldnew ...string) *Replacer NewReplacer
从列表中返回一个新的替换后的字符串,oldnew是slice
package main import ( "fmt" "strings" ) func main() { r := strings.NewReplacer("<", "<", ">", ">") fmt.Println(r.Replace("This is <b>HTML</b>!")) //This is <b>HTML</b>! }
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
函数讲字符串替换后,然后写入w中
package main import ( "fmt" "io/ioutil" "os" "strings" ) func main() { r := strings.NewReplacer("<", "<", ">", ">") w, _ := os.OpenFile("test1.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) defer w.Close() n, err := r.WriteString(w, "This is <b>HTML</b>!") if err != nil { fmt.Println(err) } fmt.Println(n) d, _ := ioutil.ReadFile("test1.txt") //32 fmt.Println(string(d)) //This is <b>HTML</b>! }