go语言中strings包的用法汇总

2020-01-28 13:24:52于丽

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

func main() {
 s := "你好 世界!"
 // 创建 Reader
 r := strings.NewReader(s)
 // 读取 r 中的一个字符
 for i := 0; i < 5; i++ {
  b, n, _ := r.ReadRune()
  fmt.Printf(`"%c:%v", `, b, n)
  // "你:3", "好:3", " :1", "世:3", "界:3",
 }
}

------------------------------------------------------------

// 撤消前一次的 ReadRune 操作
func (r *Reader) UnreadRune() error

func main() {
 s := "你好 世界!"
 // 创建 Reader
 r := strings.NewReader(s)
 // 读取 r 中的一个字符
 for i := 0; i < 5; i++ {
  b, _, _ := r.ReadRune()
  fmt.Printf("%q, ", b)
  // '你', '你', '你', '你', '你',
  r.UnreadRune() // 撤消前一次的字符读取操作
 }
}

------------------------------------------------------------

// Seek 用来移动 r 中的索引位置
// offset:要移动的偏移量,负数表示反向移动
// whence:从那里开始移动,0:起始位置,1:当前位置,2:结尾位置
// 如果 whence 不是 0、1、2,则返回错误信息
// 如果目标索引位置超出字符串范围,则返回错误信息
// 目标索引位置不能超出 1 << 31,否则返回错误信息
func (r *Reader) Seek(offset int64, whence int) (int64, error)

func main() {
 s := "Hello World!"
 // 创建 Reader
 r := strings.NewReader(s)
 // 创建读取缓冲区
 b := make([]byte, 5)
 // 读取 r 中指定位置的内容
 r.Seek(6, 0) // 移动索引位置到第 7 个字节
 r.Read(b)    // 开始读取
 fmt.Printf("%qn", b)
 r.Seek(-5, 1) // 将索引位置移回去
 r.Read(b)     // 继续读取
 fmt.Printf("%qn", b)
}

------------------------------------------------------------

// WriteTo 将 r.i 之后的数据写入接口 w 中
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)

func main() {
 s := "Hello World!"
 // 创建 Reader
 r := strings.NewReader(s)
 // 创建 bytes.Buffer 对象,它实现了 io.Writer 接口
 buf := bytes.NewBuffer(nil)
 // 将 r 中的数据写入 buf 中
 r.WriteTo(buf)
 fmt.Printf("%qn", buf) // "Hello World!"
}

============================================================

// replace.go

------------------------------------------------------------

// Replacer 根据一个替换列表执行替换操作