• golang之strings


    针对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>!
    }
    

      

  • 相关阅读:
    用SQL实现的一个自动排课机制
    如何读懂复杂的C声明
    Mingw32配置
    test
    HttpSession API
    java程序逻辑控制
    方法的定义及使用
    memcached 安装及集成(转)
    cookie和session的的区别以及使用示例?
    构造方法和普通方法的区别?
  • 原文地址:https://www.cnblogs.com/flash55/p/10604354.html
Copyright © 2020-2023  润新知