go语言中strings包的用法汇总

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

 fmt.Printf("%qn", ts) // " 世界"
}

注:TrimSuffix只是去掉s字符串结尾的suffix字符串,只是去掉1次,而TrimRight是一直去掉s字符串右边的字符串,只要有响应的字符串就去掉,是一个多次的过程,这也是二者的本质区别.
------------------------------------------------------------

// Replace 返回 s 的副本,并将副本中的 old 字符串替换为 new 字符串
// 替换次数为 n 次,如果 n 为 -1,则全部替换
// 如果 old 为空,则在副本的每个字符之间都插入一个 new
func Replace(s, old, new string, n int) string

func main() {
 s := "Hello 世界!"
 s = strings.Replace(s, " ", ",", -1)
 fmt.Println(s)
 s = strings.Replace(s, "", "|", -1)
 fmt.Println(s)
}

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

// EqualFold 判断 s 和 t 是否相等。忽略大小写,同时它还会对特殊字符进行转换
// 比如将“ϕ”转换为“Φ”、将“DŽ”转换为“Dž”等,然后再进行比较
func EqualFold(s, t string) bool
func main() {
 s1 := "Hello 世界! ϕ DŽ"
 s2 := "hello 世界! Φ Dž"
 b := strings.EqualFold(s1, s2)
 fmt.Printf("%vn", b) // true
}

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

// reader.go

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

// Reader 结构通过读取字符串,实现了 io.Reader,io.ReaderAt,
// io.Seeker,io.WriterTo,io.ByteScanner,io.RuneScanner 接口
type Reader struct {
s string // 要读取的字符串
i int // 当前读取的索引位置,从 i 处开始读取数据
prevRune int // 读取的前一个字符的索引位置,小于 0 表示之前未读取字符
}

// 通过字符串 s 创建 strings.Reader 对象
// 这个函数类似于 bytes.NewBufferString
// 但比 bytes.NewBufferString 更有效率,而且只读
func NewReader(s string) *Reader { return &Reader{s, 0, -1} }

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

// Len 返回 r.i 之后的所有数据的字节长度
func (r *Reader) Len() int

func main() {
 s := "Hello 世界!"
 // 创建 Reader
 r := strings.NewReader(s)
 // 获取字符串的编码长度
 fmt.Println(r.Len()) // 13
}

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

// Read 将 r.i 之后的所有数据写入到 b 中(如果 b 的容量足够大)
// 返回读取的字节数和读取过程中遇到的错误
// 如果无可读数据,则返回 io.EOF
func (r *Reader) Read(b []byte) (n int, err error)