十九、Strings/Bytes

1.Strings

strings 包提供操作 UTF-8 字符串常用函数和结构体
a) 常用函数
⚫ Compare:比较字符串
⚫ Contains:是否包含子字符串
⚫ Count:子字符串出现次数
⚫ EqualFold:不区分大小写比较
⚫ Fields:按空白字符分割字符串
⚫ HasPrefix:是否以字符串作为前缀
⚫ HasSuffix:是否以字符串作为后缀
⚫ Index:获取子字符串首次出现的位置
⚫ Split:分割字符串为切片
⚫ SplitN:分割字符串为 N 个元素的切片,N<0 对整个字符串进行分割
⚫ Join:将字符串切片连接
⚫ LastIndex:获取子字符串最后一次出现的位置
⚫ Map:对字符串中每个字符调用转换函数生成新的字符串
⚫ Repeat:将字符串重复 N 次连接
⚫ Replace:替换前 N 个出现的字符串,N<0 替换全部
⚫ ReplaceAll:替换所有出现的字符串
⚫ Title:单词首字母大写
⚫ ToLower: 所有字符转为小写
⚫ ToUpper:所有字符转为大写
⚫ Trim:去除字符串前后字符
⚫ TrimSpace:去除字符串前后空格
⚫ TrimLeft:去除字符串前字符
⚫ TrimRight: 去除字符串后字符
⚫ TrimPrefix:去除字符串前缀字符串
⚫ TrimSuffix:去除字符串后缀字符串
b) 常用结构体
⚫ Builder
字符串是基本值类型,不可修改。Go 语言提供 Builder 结构体可以高效的实现符串
的拼接,实现了 io.Writer 接口,可以当作流来写入
常用方法:
➢ Write:将字节切片写入到 builder 对象
➢ WriteByte:将字节切片写入到 builder 对象
➢ WriteRune:将 rune 写入到 builder 对象
➢ WriteString:将字符串写入到 builder 对象
➢ String:将 builder 转化为 string
➢ Reset:清空内容
⚫ Reader
Go 语言提供 Reader 结构体,可以将字符串转化为 Reader 对象,当作流来读取
常用函数:
➢ NewReader:根据字符串创建 reader 对象指针
常用方法
➢ Read:读取字符串并写入到参数切片
➢ WriteTo:将 reader 对象中字符串写入到输出流中
➢ Reset:更新 reader 对象字符串内容
➢ Seek:设置 reader 对象处理位置

package main

import (
   "bufio"
   "fmt"
   "strings"
)
//os.openfile 是针对disk 也就是磁盘
//strings.builder and strings.writer 是针对内存
//bufio是做了一层缓存 也就是封装
func main() {
   reader := strings.NewReader("aaaaaaaaa\naaabbbbb")
   //bytes := make([]byte,3)
   //for {
   // //常用于 接受一个流不想保存在本地文件,可以直接操作
   // //bufio一般用于持久化文件的缓存 对于内存中的缓存没啥意义
   // n,err := reader.Read(bytes)
   // if err != nil {
   //    if err != io.EOF{
   //       fmt.Println(err)
   //    }
   //    break
   // }else {
   //    fmt.Println(string(bytes[:n]))
   // }
   //}
   scanner := bufio.NewScanner(reader)
   for scanner.Scan(){
      fmt.Println(scanner.Text())
   }
   //builder 可以做字符串的拼接 多次添加可以用这种方式
   //可以提升字符串的操作速度
   //平常做字符串拼接每次都需要重新申请内存空间 然后经过计算作拼接
   //builder的话是存在内存中 一次转换string
   var builder  strings.Builder
   builder.Write([]byte("aaabb"))
   builder.WriteString("cccc")
   fmt.Println(builder.String())
}

2.Bytes

bytes 包提供了操作 byte[](字节切片)常用函数
a) 类型转换
可以将 string 通过函数 byte[]转化为字节切片,同时也可通过 string 函数将子接切片转
化为 string
b) 常用函数:见 strings 包
c) 常用结构体
⚫ Buffer
Go 语言提供了可变大小的字节缓冲区 Buffer,实现了 io.Reader 和 io.Writer 接口,
可以当作流来写入和读取
常用函数:
➢ NewBuffer:使用字节切片创建 Buffer 对象
➢ NewBufferString:使用字符串创建 buffer 对象
常用方法:
➢ Bytes:将 buffer 对象转化为字节切片
➢ String:将 buffer 对象转化为字符串
➢ Read:读取字符串并放入到切片中
➢ ReadFrom:从流中读入
➢ ReadString:读取字符串,碰到分隔符位置
➢ ReadBytes:读取字符切片,碰到分隔符位置
➢ Write:将字节切片写入到 buffer
➢ WriteByte:将字节切片写入到 buffer 对象
➢ WriteRune:将 rune 写入到 buffer 对象
➢ WriteString:将字符串写入到 buffer 对象
➢ WriteTo:将 buffer 对象中字符串写入到输出流中
➢ Reset: 清空内容
⚫ Reader
Go 语言提供 Reader 结构体,可以将字节切片转化为 Reader 对象,当作流来读取
常用函数:
➢ NewReader:根据字符串创建 reader 对象指针
常用方法:
➢ Read:读取字节切片并写入到参数切片中
➢ WriteTo:将 reader 对象中字符串写入到输出流中
➢ Reset:更新 reader 对象字节切片内容
➢ Seek:设置 reader 对象处理位置

package main

import (
   "bytes"
   "fmt"
)

func main() {
   buffer := bytes.NewBufferString("cc")
   buffer.Write([]byte("aaa"))
   buffer.WriteString("!cc")
   fmt.Println(buffer)

   bytes := make([]byte,2)
   buffer.Read(bytes)
   //这里表示读buffer一次2个字节
   fmt.Println(string(bytes))
   line,_ := buffer.ReadString('!')
   fmt.Println(line)


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章