十九、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)


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