字符串处理

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

字符串操作

前缀和后缀

HasPrefix判断字符串是否以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字符串包含关系

字符串s中是否包含substr,返回bool值

函数签名
func Contains(s,subsre string) 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到字符串)

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

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

栗子:

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

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

函数签名
strings.Index(s,str strings)int
Lastlndex

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

函数签名
strings.LastIndex(s,str string)int

栗子:

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

如果需要查询非 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 strings)int

栗子:

str2 := "fffffff"
fmt.Println(strings.Count(str2,"f"))
Repeat

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

函数签名
func Repeat(s string,count int) string

栗子:

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(字符串替换)

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

函数签名
func Replace(s,old, new string, n int)string

栗子:

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

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

函数签名
strings.ToLower(s) string
ToUpper
函数签名
strings.ToUpper(s) string

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

栗子:

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)
}
Fields(分割字符串)

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

Split(分割字符串)

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

func Split(s,sep string)[]string
package main
import ("fmt""strings"
)
package mainimport ("fmt""strings"
)func main() {str1 := "hello world python golang"field := strings.Fields(str1)fmt.Printf("%q\n", field) //输出:["hello" "world" "python" "golang"]split := strings.Split(str1, " ")fmt.Printf("%q\n", split) //输出:["hello" "world" "python" "golang"]join := strings.Join(split, ";")fmt.Println(join) //输出:hello;world;python;golang
}
Trim Trimleft TrimRight

在s字符串的头部和尾部去除cutest指定字符串

func Trim(s string,cutset string)string

栗子:

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

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

package mainimport ("fmt""strings"
)func main() {mapFunc := func(r rune) rune {switch {case r > 'A' && r < 'Z':return r + 32case r > 'a' && r < 'z':return r - 32}return r}s := "hello World!"sMap := strings.Map(mapFunc, s)fmt.Println(sMap)}
NewReader(从字符串中读取内容)

函数strings.NewReader(str)用于生成一个Reder并读取字符串中的内容,然后返回指向该Reder的指针。

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 mainimport ("fmt""strings"
)func main() {s := "hello world"r := strings.NewReader(s)fmt.Println(r)        // &{hello world 0 -1}fmt.Println(r.Size()) // 字符串长度 11fmt.Println(r.Len())  // 未读取长度 11for r.Len() > 5 {b, err := r.ReadByte() // 读取1bytefmt.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())                  // 11fmt.Println(r.Len())                   // 0
}
ReadByte() 和 ReadRune() 从字符串中读取下一个 byte 或者 rune。

参考:https://blog.csdn.net/sanxiaxugang/article/details/60324012

Golang标准库-strings 字符串操作相关推荐

  1. Golang 标准库--strings

    本文介绍Go 标准库 strings 常用导出函数,结构体及其方法. import strings strings 包实现了用于操作字符串的简单函数,包括 strings 导出函数和 Reader, ...

  2. C语言的本质——C标准库之字符串操作

    字符串处理函数 C语言提供了丰富的字符串处理函数,大致可分为字符串的输入.输出.合并.修改.比较.转换.复制.搜索几类.使用这些函数可大大减轻编程的负担.用于输入输出的字符串函数,在使用前应包含头文件 ...

  3. golang 标准库strings包 简介

    Count // Count 计算字符串 sep 在 s 中的非重叠个数 // 如果 sep 为空字符串,则返回 s 中的字符(非字节)个数 + 1 // 使用 Rabin-Karp 算法实现 fun ...

  4. GoLang之标准库strings包

    文章目录 GoLang之标准库strings包 1.函数介绍 2.EqualFold 3.TrimSpace 4.HasPrefix 5.HasSuffix 6.Index 7.LastIndex 8 ...

  5. Golang 标准库log的实现

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gotaly.blog.51cto.com/8861157/1406905 前一篇 ...

  6. Golang标准库中的fmt

    Golang标准库中的fmt fmt包实现了类似C语言printf和scanf的格式化I/O.主要分为向外输出内容和获取输入内容两大部分. 1. 向外输出 标准库fmt提供了以下几种输出相关函数. P ...

  7. golang 标准库间依赖的可视化展示

    简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内 ...

  8. Golang标准库-syscall(什么是系统调用/Go 语言中的系统调用)

    文章目录 一.什么是系统调用 二.Golang标准库-syscall 1. syscall无处不在 2. syscall demo举例: go版本的strace Strace go版本的strace ...

  9. Golang标准库RPC实践及改进

    转载自:http://daizuozhuo.github.io/golang-rpc-practice/ 一直用Golang标准库里的的RPC package来进行远程调用,简单好用. 但是随着任务数 ...

最新文章

  1. 【青少年编程】黄羽恒:加减乘除法小测试
  2. 那些你不知道的单词小秘密
  3. springboot官网-pom.xml文件
  4. 小叮咚切分词方法加入sourceforge.net中WebLucene分词模块
  5. Hbase的伪分布式安装
  6. 哈工大-操作系统的引导
  7. Android getReadableDatabase() 和 getWritableDatabase()
  8. 如何更改Eclipse中Properties文件编码格式
  9. 关于写好一篇英文学术论文(及搞好本领域学术研究)的一些想法
  10. matlab拓扑图画法,告诉你漂亮标准的网络拓扑图是怎么画出来的?
  11. 史上最纯净的Win7专业版系统
  12. 统一身份认证与授权标准介绍:OpenID,OAuth2,SAML
  13. Win10禁止更新设备驱动的几种方式
  14. 域名解析产品——HTTPDNS使用教程
  15. nodeMCU_esp8266管脚示意图/特殊管脚的使用避坑(D3/D4/D8/..)
  16. 【理财入门二】复利思维
  17. JavaSE学习---I/O流学习分享
  18. ssis的數據分流,mark一下
  19. 串口(SerialPort)的使用
  20. 2005年上半年(第21次)全国计算机等级考试(NCRE)广东考区报考简章

热门文章

  1. 电脑代码python_python发 代码分享 -电脑资料
  2. 7.试定义RECT类(长方形)及其派生类CUB(长方体)
  3. 工具类微信小程序-你记我账-实例源码
  4. c语言字符串对应的百分号,百分号在C语言中是怎样用的?
  5. 新品上市 | 合宙MCU新品Air103【芯片+开发板+拓展板】火爆来袭
  6. 使用SourceInsight4.0看代码常用操作及快捷键
  7. 设备接入ONENET(3)STM32 + ESP8266(MQTT协议)接入云 :官方例程移植笔记(HAL+LL库)
  8. 图像生成与图像模型——摄像机的几何模型
  9. CSS之选择器(二)复合选择器
  10. linux 端口未 listen,linux – TCP *:hbci(LISTEN) – hbci是什么意思?