参考https://studygolang.com/pkgdoc

导入方式:

import "strings"

strings包实现了用于操作字符的简单函数。

常用的几个函数:

func Contains

func Contains(s, substr string) bool

判断字符串s是否包含子串substr。

举例:

package main
import(
"fmt"
"strings" ) func main() {
fmt.Println(strings.Contains("seafood", "foo")) //true
fmt.Println(strings.Contains("seafood", "bar")) //false
fmt.Println(strings.Contains("seafood", "")) //true
fmt.Println(strings.Contains("", "")) //true
}

func Index

func Index(s, sep string) int

子串sep在字符串s中第一次出现的位置,不存在则返回-1。

举例:

package main
import(
"fmt"
"strings" ) func main() {
fmt.Println(strings.Index("chicken", "ken")) //
fmt.Println(strings.Index("chicken", "dmr")) //-1
}

func Join

func Join(a []string, sep string) string

将一系列字符串连接为一个字符串,之间用sep来分隔。

举例:

package main
import(
"fmt"
"strings" ) func main() {
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))//foo, bar, baz
}

func Repeat

func Repeat(s string, count int) string

返回count个s串联的字符串。

举例:

package main
import(
"fmt"
"strings" ) func main() {
fmt.Println("ba" + strings.Repeat("na", )) //banana
}

func Replace

func Replace(s, old, new string, n int) string

返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。

举例:

package main
import(
"fmt"
"strings" ) func main() {
fmt.Println(strings.Replace("oink oink oink", "k", "ky", )) //oinky oinky oink
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -)) //moo moo moo
}

func Split

func Split(s, sep string) []string

用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。

举例:

package main
import(
"fmt"
"strings" ) func main() {
fmt.Printf("%q\n", strings.Split("a,b,c", ",")) //["a" "b" "c"]
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) //["" "man " "plan " "canal panama"]
fmt.Printf("%q\n", strings.Split(" xyz ", "")) //[" " "x" "y" "z" " "]
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins")) //[""]
}

func Trim

func Trim(s string, cutset string) string

返回将s前后端所有cutset包含的utf-8码值都去掉的字符串。

举例:

package main
import(
"fmt"
"strings" ) func main() {
fmt.Printf("[%q]\n", strings.Trim(" !!! Achtung! Achtung! !!! ", "! ")) //["Achtung! Achtung"]
}

func Fields

func Fields(s string) []string

返回将字符串按照空白(unicode.IsSpace确定,可以是一到多个连续的空白字符)分割的多个字符串。如果字符串全部是空白或者是空字符串的话,会返回空切片。

举例:

package main
import(
"fmt"
"strings" ) func main() {
fmt.Printf("Fields are: %q\n", strings.Fields(" foo bar baz ")) //Fields are: ["foo" "bar" "baz"]
}

)type Reader

type Reader struct {
s string
i int64 // current reading index
prevRune int // index of previous rune; or < 0

Reader类型通过从一个字符串读取数据,实现了io.Reader、io.Seeker、io.ReaderAt、io.WriterTo、io.ByteScanner、io.RuneScanner接口。

实现源码:

1> func NewReader

func NewReader(s string) *Reader

NewReader创建一个从s读取数据的Reader。本函数类似bytes.NewBufferString,但是更有效率,且为只读的。

该初始化源码:

func NewReader(s string) *Reader { return &Reader{s, 0, -1} }

举例:

package main
import(
"fmt"
"io"
"strings"
"os"
)
func main() {
reader := strings.NewReader("test reader's usage")
buf := make([]byte, 4) //生成一个能够存放4 bytes数据的数组
for {//无限循环直至有错或数据读取完返回EOF
count, err := reader.Read(buf)//后面读取的内容会覆盖前面的buf的内容
if err != nil {
if err == io.EOF {
fmt.Println("EOF : ", count)
break
}
fmt.Println(err)
os.Exit(1)
}
fmt.Println(count, string(buf[:count]))
}
}

返回:

userdeMBP:src user$ go run test.go
4 test
4 rea
4 der'
4 s us
3 age
EOF :

2》func (*Reader) Len

func (r *Reader) Len() int

Len返回r包含的字符串还没有被读取的部分,即当前文件指针之后的内容

3》func (*Reader) Read

func (r *Reader) Read(b []byte) (n int, err error)

4》func (*Reader) ReadByte

func (r *Reader) ReadByte() (b byte, err error)

5》func (*Reader) UnreadByte

func (r *Reader) UnreadByte() error

6》func (*Reader) ReadRune

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

7》func (*Reader) UnreadRune

func (r *Reader) UnreadRune() error

8》func (*Reader) ReadAt

func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)

9》func (*Reader) WriteTo

func (r *Reader) WriteTo(w io.Writer) (n int64, err error)

WriteTo实现了io.WriterTo接口。

举例:

package main
import(
"fmt"
"strings"
"log"
"os"
)
func main() {
fmt.Println("1 - test Read")
reader := strings.NewReader("test strings's NewReader() and the usage of its function\n")
len := reader.Len()
fmt.Printf("1 before - the length of the part have not beed read : %d\n", len)
data := make([]byte, 8)
number, err := reader.Read(data)
if err != nil {
log.Fatal(err)
}
len = reader.Len()
fmt.Printf("1 after - the length of the part have not beed read : %d\n", len)
fmt.Println(string(data[:number])) fmt.Println("2 - test ReadByte")
for i := 0; i < 3; i++ {
readbyte, err := reader.ReadByte()//从当前文件指针向后读取一个byte的内容
if err != nil {
log.Fatal(err)
}
fmt.Print(readbyte, " ")
}
fmt.Println() len = reader.Len()
fmt.Printf("2 after - the length of the part have not beed read : %d\n", len) fmt.Println("3 - test UnreadByte") //就相当于撤销之前的一次ReadByte()操作,文件指针向前移一位
err = reader.UnreadByte()
if err != nil {
log.Fatal(err)
} len = reader.Len()
fmt.Printf("3 after - the length of the part have not beed read : %d\n", len) fmt.Println("4 - test ReadAt")
number1, err := reader.ReadAt(data, 11)
if err != nil {
log.Fatal(err)
}
len = reader.Len()
fmt.Printf("4 after - the length of the part have not beed read : %d\n", len)
fmt.Println(string(data[:number1])) fmt.Println("5 - test ReadRune")
for i := 0; i < 3; i++ {
readrune, _, err := reader.ReadRune()//从当前文件指针向后读取一个rune的内容
if err != nil {
log.Fatal(err)
}
fmt.Print(readrune, " ")
// fmt.Print(readrune)
}
fmt.Println() len = reader.Len()
fmt.Printf("5 after - the length of the part have not beed read : %d\n", len) fmt.Println("6 - test UnreadRune")
err = reader.UnreadRune() //就相当于撤销之前的一次ReadByte()操作,文件指针向前移一位
if err != nil {
log.Fatal(err)
}
len = reader.Len()
fmt.Printf("6 after - the length of the part have not beed read : %d\n", len) fmt.Println("test WriterTo")
number3, err := reader.WriteTo(os.Stdout)//从当前指针开始将文件内容输出到os.Stdout,即标准输出中
if err != nil {
log.Fatal(err)
}
fmt.Println(number3)
}

返回:

userdeMBP:src user$ go run test.go
1 - test Read
1 before - the length of the part have not beed read : 57
1 after - the length of the part have not beed read : 49
test str
2 - test ReadByte
105 110 103 //即ing
2 after - the length of the part have not beed read : 46
3 - test UnreadByte
3 after - the length of the part have not beed read : 47
4 - test ReadAt
4 after - the length of the part have not beed read : 47
s's NewR
5 - test ReadRune
103 115 39 //即gs'
5 after - the length of the part have not beed read : 44
6 - test UnreadRune
6 after - the length of the part have not beed read : 45
test WriterTo
's NewReader() and the usage of its function

未完待续

go标准库的学习-strings-字符串操作的更多相关文章

  1. Python3标准库:string通用字符串操作

    1. string:通用字符串操作 string模块在很早的Python版本中就有了.以前这个模块中提供的很多函数已经移植为str对象的方法,不过这个模块仍保留了很多有用的常量和类来处理str对象. ...

  2. go标准库的学习-net/http

    参考:https://studygolang.com/pkgdoc 概念解释: request:用户请求的信息,用来解析用户的请求信息,包括post.get.cookie.url等信息 respons ...

  3. go标准库的学习-database/sql

    参考:https://studygolang.com/pkgdoc 导入方式: import "database/sql" sql包提供了保证SQL或类SQL数据库的泛用接口. 使 ...

  4. go标准库的学习-crypto/md5

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/md5" md5包实现了MD5哈希算法,参见RFC 1321. Con ...

  5. go标准库的学习-crypto/sha1

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha1" sha1包实现了SHA1哈希算法,参见RFC 3174. ...

  6. go标准库的学习-crypto/sha256

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha256" sha256包实现了SHA224和SHA256哈希算法 ...

  7. go标准库的学习-path/filepath

    参考https://studygolang.com/pkgdoc 标准库path中有的该path/filepath库中都有,所以一般都使用path/filepath 导入方式: import &quo ...

  8. go标准库的学习-io

    参考https://studygolang.com/pkgdoc 导入方式: import "io" o包提供了对I/O原语的基本接口.本包的基本任务是包装这些原语已有的实现(如o ...

  9. go标准库的学习-bufio

    参考https://studygolang.com/pkgdoc 导入方式: import "bufio" bufio包实现了有缓冲的I/O.它包装一个io.Reader或io.W ...

  10. python 标准库基础学习之开发工具部分1学习

    #2个标准库模块放一起学习,这样减少占用地方和空间#标准库之compileall字节编译源文件import compileall,re,sys#作用是查找到python文件,并把它们编译成字节码表示, ...

随机推荐

  1. vue 使用mint-ui实现上拉加载和下拉刷新

    解决了官网中下拉刷新存在的问题 <template> <div class="tmpl"> <nav-bar title="商品列表&quo ...

  2. 【Java基础】9、Enumeration接口和Iterator接口的区别

    package java.util; public interface Enumeration<E> {     boolean hasMoreElements();     E next ...

  3. linux学习笔记-文件相关知识

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.文件属性 在当前用户家目录下以ls -al命令输出为例: -rw-r--r--     1          renren  ...

  4. 2017-10-29 用中文命名API的意义和途径

    "中文编程"知乎专栏原链 在前文对在代码中使用中文命名的质疑与回应中阐述了在代码中使用中文命名的益处. 此文将从软件使用者的角度阐述对API中文化的意义并探讨实现途径. 当然, 文 ...

  5. KVM虚拟化研究-1

    使用qemu-img创建镜像 例子: [root@HOST31 rybtest]# qemu-img create -f raw /rybtest/test1.raw 1G 使用qemu-img查看镜 ...

  6. 异步陷阱之IO篇

    很多教程和资料都强调流畅的用户体验需要异步来辅助,核心思想就是保证用户前端的交互永远有最高的优先级,让一切费时的逻辑通通放到后台,等到诸事完备,通知一下前端给个提示或者继续下一步.随着.NET发展,a ...

  7. 【Java入门提高篇】Day27 Java容器类详解(九)LinkedList详解

    这次介绍一下List接口的另一个践行者——LinkedList,这是一位集诸多技能于一身的List接口践行者,可谓十八般武艺,样样精通,栈.队列.双端队列.链表.双向链表都可以用它来模拟,话不多说,赶 ...

  8. 山西WebGIS项目总结

    有一段时间没写blog了,说实话,最近的心态一直在变化,看了一部日剧,回想了这一年所学所见,感觉生活目标变了. 做国土项目这段时间不是很忙,由于数据一直给不到位,时间拖得很久,所以在这期间也在继续学习 ...

  9. TensorFlow 安装教程

    1.准备好Anaconda环境 tensorflow是属于很高层的应用.高层应用的一个比较大的麻烦就是需要依赖的底层的东西很多,如果底层依赖没有弄好的话,高层应用是没法玩转的. 在极客学院有关tens ...

  10. Linux 查看对外开放端口

    备忘命令: netstat -anpt | grep 514 # 查看 rsyslog tcp 端口是否开放 保持更新,转载请注明出处.