golang标准库-strings

字符串处理

字符串在开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割、连接、转换等操作

字符串操作

下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档。

1.前缀和后缀

HasPrefix 判断字符串s是否以prefix开头:
函数签名
strings.HasPrefix(s, prefix string) bool

HasSuffix 判断字符串 s 是否以 suffix 结尾:

函数签名
strings.HasSuffix(s, suffix string) bool

示例:

package main
import (
    "fmt"
    "strings"
)
func main(){

    str1 := "this is a example strings"
    fmt.Println(strings.HasPrefix(str1, "th"))
    fmt.Println(strings.HasSuffix(str1, "gs"))
}

Contains 字符串包含关系

func Contains(s, substr string) bool
  • 功能:字符串s中是否包含substr,返回bool值
    示例代码:
fmt.Println(strings.Contains("seafood", "foo"))
fmt.Println(strings.Contains("seafood", "bar"))
fmt.Println(strings.Contains("seafood", ""))
fmt.Println(strings.Contains("", ""))
//运行结果:
//true
//false
//true
//true

Join(拼接slice到字符串)

Join 用于将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串

函数签名
strings.Join(sl []string, sep string) string

举例:

示例1:
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ","))
示例2:
package main
import (
    "fmt"
    "strings"
)
func main() {
    str1 := "hello world python golang"
    field := strings.Fields(str1)
    fmt.Printf("%q\n", field)
    split := strings.Split(str1, " ")
    fmt.Printf("%q\n", split)
    join := strings.Join(split, ";")
    fmt.Println(join)
}

Index、LastIndex、IndexRune

功能:在字符串s中查找sep所在的位置,返回位置值,找不到返回-1

语法:

strings.Index(s, str string) int

LastIndex 返回字符串 str 在字符串 s 中最后出现位置的索引(str 的第一个字符的索引),-1 表示字符串 s 不包含字符串 str:

strings.LastIndex(s, str string) int

示例代码:

fmt.Println(strings.Index("chicken", "ken"))
fmt.Println(strings.Index("chicken", "dmr"))
//运行结果:
//    4
//    -1

如果需要查询非 ASCII 编码的字符在父字符串中的位置,建议使用以下函数来对字符进行定位:

strings.IndexRune(s string, r rune) int
var c string = "Hi I am Hello world"
fmt.Println(strings.IndexRune(c, rune('a')))
fmt.Println(strings.IndexRune(c, 97))

Count

Count 用于计算字符串 str 在字符串 s 中出现的非重叠次数:

strings.Count(s, str string) int
举例:
str2 := "fffffff"
fmt.Println(strings.Count(str2,"f"))

Repeat

func Repeat(s string, count int) string

功能:重复s字符串count次,并返回一个新的字符串

示例代码:

var orgiS string = "Hi there! "
news := strings.Repeat(orgiS, 3) // Hi there! Hi there! Hi there!
fmt.Printf("news str is: %s\n", news)

Replace (字符串替换)

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

功能:在s字符串中,把old字符串替换为new字符串,n表示替换的次数,小于0表示全部替换
示例代码:

fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))
//运行结果:
//oinky oinky oink
//moo moo moo

ToLower,ToUpper(修改字符串的大小写)

ToLower 将字符串中的 Unicode 字符全部转换为相应的小写字符:

函数签名
strings.ToLower(s) string

ToUpper 将字符串中的 Unicode 字符全部转换为相应的大写字符:

函数签名
strings.ToUpper(s) string
举例:
package main
import (
    "fmt"
    "strings"
)
func main() {
    var str1 = "go how are you"
    lower := strings.ToLower(str1)
    fmt.Println(lower)
    upper := strings.ToUpper(str1)
    fmt.Println(upper)
}

Split,Fields(分割字符串)

strings.Fields(s) 将会利用 1 个或多个空白符号来作为动态长度的分隔符将字符串分割成若干小块,并返回一个 slice,如果字符串只包含空白符号,则返回一个长度为 0 的 slice。

strings.Split(s, sep) 用于自定义分割符号来对指定字符串进行分割,同样返回 slice

func Split(s, sep string) []string

功能:把s字符串按照sep分割,返回slice

示例代码:

package main
import (
    "fmt"
    "strings"
)
func main() {
    str1 := "Hello,    golang, world,python"
    field := strings.Fields(str1)
    fmt.Printf("%q\n", field) // ["Hello," "golang," "world,python"]
    split := strings.Split(str1, ",")
    fmt.Printf("%q\n", split) // ["Hello" "    golang" " world" "python"]
}

Trim Trimleft TrimRight

func Trim(s string, cutset string) string

功能:在s字符串的头部和尾部去除cutset指定的字符串
示例代码:

fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! "))
//运行结果:["Achtung"]

Map

将s的每一个unicode码值r都替换为mapping(r),返回这些新码值组成的字符串拷贝。如果mapping返回一个负值,将会丢弃该码值而不会被替换

示例代码:
package main
import (
    "fmt"
    "strings"
)
func main() {
    mapFunc := func(r rune) rune {
        switch {
        case r > 'A' && r < 'Z':
            return r + 32
        case r > 'a' && r < 'z':
            return r - 32
        }
        return r
    }
    s := "hello World!"
    sMap := strings.Map(mapFunc, s)
    fmt.Println(sMap)

}

NewReader(从字符串中读取内容)

函数 strings.NewReader(str) 用于生成一个 Reader 并读取字符串中的内容,然后返回指向该 Reader 的指针,从其它类型读取内容的函数还有:

Read() 从 []byte 中读取内容。
ReadByte() 和 ReadRune() 从字符串中读取下一个 byte 或者 rune。
参考:https://blog.csdn.net/sanxiaxugang/article/details/60324012

Reader 结构体

Reader 类型从一个字符串读取数据,实现了io.Reader, io.Seeker等接口。

func NewReader(s string) *Reader // 通过字符串 s 创建一个 Reader
func (r *Reader) Len() int // 返回 r 还没有读取部分的长度
func (r *Reader) Read(b []byte) (n int, err error) // 读取部分数据到 b 中,读取的长度取决于 b 的容量
func (r *Reader) ReadByte() (b byte, err error) // 从 r 中读取一字节数据
示例代码:
package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "hello world"
    r := strings.NewReader(s)
    fmt.Println(r)        // &{hello world 0 -1}
    fmt.Println(r.Size()) // 字符串长度 11
    fmt.Println(r.Len())  // 未读取长度 11
    for r.Len() > 5 {
        b, err := r.ReadByte() // 读取1byte
        fmt.Println(string(b), err, r.Len(), r.Size())
        // h <nil> 10 11
        // e <nil> 9 11
        // l <nil> 8 11
        // l <nil> 7 11
        // o <nil> 6 11
        //   <nil> 5 11
    }
    // 读取还未被读取字符串中5字符的数据
    remainStr := make([]byte, 5)
    n, err := r.Read(remainStr)
    fmt.Println(string(remainStr), n, err) // world 5 <nil>
    fmt.Println(r.Size())                  // 11
    fmt.Println(r.Len())                   // 0
}
Replacer 结构体

Replacer 类型实现字符串替换的操作

func NewReplacer(oldnew ...string) *Replacer // 使用提供的多组old、new字符串对创建一个*Replacer
func (r *Replacer) Replace(s string) string // 返回s 所有替换完后的拷贝
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error) // 向w中写入s替换完后的拷贝

参考:

原文地址:https://www.cnblogs.com/action-go/p/11560190.html

时间: 2024-10-07 13:54:23

golang标准库-strings的相关文章

Golang中使用log(一):Golang 标准库提供的Log

Golang的标准库提供了log的机制,但是该模块的功能较为简单(看似简单,其实他有他的设计思路).不过比手写fmt. Printxxx还是强很多的.至少在输出的位置做了线程安全的保护.其官方手册见Golang log (天朝的墙大家懂的).这里给出一个简单使用的例子: package main import ( "log" ) func main(){ log.Fatal("Come with fatal,exit with 1 \n") } 编译运行后,会看到程

Golang标准库之Buffer

Buffer Go标准库Buffer是一个可变大小的字节缓冲区,可以用Wirte和Read方法操作它,在Go标准库中,定义了如下关于Buffer的数据结构. type Buffer struct { buf []byte // contents are the bytes buf[off : len(buf)] off int // read at &buf[off], write at &buf[len(buf)] runeBytes [utf8.UTFMax]byte // avoid

Golang中使用log(二):Golang 标准库log的实现

前一篇文章我们看到了Golang标准库中log模块的使用,那么它是如何实现的呢?下面我从log.Logger开始逐步分析其实现. 其源码可以参考官方地址 1.Logger结构 首先来看下类型Logger的定义: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write at beginning of each

golang标准库文档

Golang标准库文档 https://studygolang.com/pkgdoc go中文官网 https://go-zh.org/doc/ <Go Web 基础>是一套针对 Google 出品的 Go 语言的视频语音教程,主要面向完成 <Go 编程基础>有关 Go Web 开发的学习者. Unknwon/go-web-foundation <Go 编程基础>主要面向新手级别的学习者.Unknwon/go-fundamental-programming <Go

golang 标准库 container/ring 及 container/heap

由于目前golang 没有提供泛型机制,所以通用容器实现基本和 c 类似,golang 用 interface{} 做转接, c 用 void * 转接. ring 包实现循环双向链表: type Ring struct   {        next, prev *Ring        Value      interface{}  } 内部导出一个用户可以操作的Value 字段. heap 包实现 binary heap : type Interface interface {      

golang标准库 context的使用

本文索引 问题引入 context包简介 示例 问题引入 goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇. goroutine的简单固然有利于我们的开发,但简单总是有代价的,考虑如下例子: func httpDo(req *http.Request, resp *http.Response) { for { select { case <-time.After(5 * time.Second): // 从req读取数据然后发送给resp // 其他的一

golang 标准库io/ioutil,读取文件,生成临时目录/文件

1.读取目录 list, err := ioutil.ReadDir("DIR")//要读取的目录地址DIR,得到列表 if err != nil { fmt.Println("read dir error") return } for _, info := range list { //遍历目录下的内容,获取文件详情,同os.Stat(filename)获取的信息 info.Name()//文件名 info.Mode()//文件权限 info.Size()//文件

golang标准库--io

一.type Reader interface { Read(p []byte)(n int, err error) } Reader是一个包含Read方法的接口 Read方法读取len(p)个字节到p中.它返回读取到的字节数和遇到的错误.即使Read返回n<len(p),在调用过程中也会使用所有p作为暂存空间.如果一些可读取的数据没有len(p),按照惯例Read会返回读取到的数据,而不是等待更多. 当Read成功读取n>0个字节后遇到一个错误或者end-of-file条件,它会返回读取到的

Go语言开发(十二)、Go语言常用标准库二

Go语言开发(十二).Go语言常用标准库二 一.os 1.os简介 os 包提供了不依赖平台的操作系统函数接口,设计像Unix风格,但错误处理是go风格,当os包使用时,如果失败后返回错误类型而不是错误数量. 2.os常用接口 func Hostname() (name string, err error) // Hostname返回内核提供的主机名 func Environ() []string // Environ返回表示环境变量的格式为"key=value"的字符串的切片拷贝 f