目录

  • 前缀和后缀
  • 字符串包含关系
  • 判断子字符串或字符在父字符串中出现的位置(索引)
  • 字符串替换
  • 统计字符串出现次数
  • 重复字符串
  • 修改字符串大小写
  • 修剪字符串
  • 分割字符串
  • 拼接slice到字符串
  • 从字符串中读取内容
  • 字符串与其它类型的转换

前缀和后缀

HasPrefix判断字符串s是否以prefix开头:

strings.HaxPrefix(s string, prefix string) bool

示例:

package mainimport ("fmt""strings"
)func main() {pre := "Thi"str1 := "This is a Go program!"fmt.Println(strings.HasPrefix(str1, pre))}

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

strings.HasSuffix(s string, suffix string) bool

示例:

package mainimport ("fmt""strings"
)func main() {suffix := "am!"str1 := "This is a Go program!"fmt.Println(strings.HasSuffix(str1, suffix))}

字符串包含关系

Contains 判断字符串 s 是否包含 substr :

strings.Contains(s string, substr string) bool

示例:

package mainimport ("fmt""strings"
)func main() {substr := "is"str1 := "This is a Go program!"fmt.Println(strings.Contains(str1, substr))}

判断子字符串或字符在父字符串中出现的位置(索引)

Index 返回字符串 substr 在字符串 s 中的索引( substr 的第一个字符的索引),-1 表示字符串 s 不包含字符串 substr :

strings.Index(s string, sbustr string) int

示例:

package mainimport ("fmt""strings"
)func main() {substr := "is"substr2 := "Hi"str1 := "This is a Go program!"fmt.Println(strings.Index(str1, substr)) //输出2fmt.Println(strings.Index(str1, substr2))//输出-1}

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

strings.LastIndex(s string, substr string) int

语法:

package mainimport ("fmt""strings"
)func main() {substr := "is"substr2 := "Hi"str1 := "This is a Go program!"fmt.Println(strings.LastIndex(str1, substr)) //输出5fmt.Println(strings.LastIndex(str1, substr2))//输出-1}

如果 r 是非 ASCII 编码的字符,建议使用以下函数来对字符进行定位:

strings.IndexRune(s string, r rune) int

示例

package mainimport ("fmt""strings"
)func main() {substr := '中'substr2 := '天'str1 := "我爱你中国"fmt.Println(strings.IndexRune(str1, substr)) //输出9fmt.Println(strings.IndexRune(str1, substr2))//输出-1}
package mainimport ("fmt""strings"
)func main() {substr := "中"substr2 := "天"str1 := "我爱你?中国"//常见的汉字在utf8中占3个字节,某些特殊的汉字(如?)在utf8中占四个字节,所以输出结果是13而不是12fmt.Println(strings.Index(str1, substr)) //输出13fmt.Println(strings.Index(str1, substr2))//输出-1}

字符串替换

Replace 用于将字符串s 中的前 n 个字符串 old 替换为字符串 new ,并返回一个新的字符串,如果 n = -1 则替换所有字符串 old 为字符串 new :

strings.Replace(s string, old string, new string, n int) string

示例:

package mainimport ("fmt""strings"
)func main() {str1 := "我爱你熙中国熙"fmt.Println(strings.Replace(str1, "熙", "", 1)) //我爱你中国熙fmt.Println(strings.Replace(str1, "熙", "", -1)) //我爱你中国}

统计字符串出现次数

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

strings.Count(s string, substr string) int

示例:

package mainimport ("fmt""strings"
)func main() {substr := "is"s := "This is a go program!"fmt.Println(strings.Count(s, substr)) //2}

重复字符串

Repeat 用于重复 count 次字符串 s 并返回一个新的字符串:

strings.Repeat(s string, count int) string

示例:

package mainimport ("fmt""strings"
)func main() {s := "This is a go program!"fmt.Println(strings.Repeat(s, 2)) //This is a go program!This is a go program!}

修改字符串大小写

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

strings.ToLower(s string) string

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

strings.ToUpper(s string) string

示例:

package mainimport ("fmt""strings"
)func main() {s := "This is a Go program!"fmt.Println(strings.ToLower(s)) //this is a go program!fmt.Println(strings.ToUpper(s)) //THIS IS A GO PROGRAM!}

修剪字符串

你可以使用 strings.TrimSpace(s) 来剔除字符串开头和结尾的空白符号;如果你想要剔除指定字符,则可以使用 strings.Trim(s,cutset) 来将开头和结尾的 cutset 去除掉。该函数的第二个参数可以包含任何字符,如果你只想剔除开头或者结尾的字符串,则可以使用 TrimLeft 或者 TrimRight 来实现。

去除字符串s左右两侧的空格:

strings.TrimSpace(s string) string

示例:

package mainimport ("fmt""strings"
)func main() {s := " ThisThis is a Go program!This "fmt.Println(s) //原生打印fmt.Println(strings.TrimSpace(s)) //剔除空格后的字符串}

去除开头或结尾的字符串:

strings.Trim(s string cutset string) string
strings.TrimLeft(s string, cutset string) string
strings.TrumRight(s string, cutset string) string

示例:

package mainimport ("fmt""strings"
)func main() {s := "ThisThis is a Go program!This"fmt.Println(strings.Trim(s, "This")) // is a Go program!fmt.Println(strings.TrimLeft(s, "This"))//is a Go program!Thisfmt.Println(strings.TrimRight(s, "This"))//ThisThis is a Go program!}

分割字符串

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

strings.Fields(s string) []string

示例:

package mainimport ("fmt""strings"
)func main() {s := "This is a Go program!"fmt.Printf("%v\n", strings.Fields(s)) //[This is a Go program!]}

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

因为这 2 个函数都会返回 slice,所以习惯使用 for-range 循环来对其进行处理

strings.Split(s string, sep string) []string

示例:

package mainimport ("fmt""strings"
)func main() {s := "This is a Go program!"result := strings.Split(s, "Go")fmt.Printf("%v\n", result) //[This is a   program!]for _, value := range result {fmt.Printf("%s\n", value)}}

拼接slice到字符串

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

strings.Join(a []string, sep string) string

示例:

package mainimport ("fmt""strings"
)func main() {var s []string = []string{"I", "love", "you"}fmt.Println(strings.Join(s, " ")) //I love you}

从字符串中读取内容

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

  • Read() 从 []byte 中读取内容。
  • ReadByte()ReadRune() 从字符串中读取下一个 byte 或者 rune。

字符串与其它类型的转换

与字符串相关的类型转换都是通过 strconv 包实现的。

该包包含了一些变量用于获取程序运行的操作系统平台下 int 类型所占的位数,如: strconv.IntSize

任何类型 T 转换为字符串总是成功的。

针对从数字类型转换到字符串,Go 提供了以下函数:

  • strconv.Itoa(i int) string 返回数字 i 所表示的字符串类型的十进制数。
  • strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string 将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 'b' 、 'e' 、 'f' 或 'g' ), prec 表示精度, bitSize 则使用 32 表示 float32,用 64 表示 float64。

针对从字符串类型转换为数字类型,Go 提供了以下函数:

  • strconv.Atoi(s string) (i int, err error) 将字符串转换为 int 型。
  • strconv.ParseFloat(s string, bitSize int) (f float64, err error) 将字符串转换为 float64 型。

利用多返回值的特性,这些函数会返回 2 个值,第 1 个是转换后的结果(如果转换成功),第 2 个是可能出现的错误,因此,我们一般使用以下形式来进行从字符串到其它类型的转换:

val, err = strconv.Atoi(s)

示例:

package mainimport ("fmt""strconv"
)func main() {origin := "666"var an intvar newS stringfmt.Printf("int类型的位数为: %d\n", strconv.IntSize)an, _ = strconv.Atoi(origin)fmt.Println(an)an += 5newS = strconv.Itoa(an)fmt.Println(newS)}

输出结果为:

int类型的位数为: 64
666
671

转载于:https://www.cnblogs.com/itbsl/p/10019972.html

Go语言strings和strconv包相关推荐

  1. Go语言---strings包(字符串操作)

    strings标准库包主要涉及字符串的基本操作. 常见字符串的操作有: 字符串求长度 求子串 是否存在某个字符或者子串 子串出现的次数(字符串匹配) 字符串分割(切分)成[]string 字符串是否存 ...

  2. 【转】Go语言---strings包(字符串操作)

    2019独角兽企业重金招聘Python工程师标准>>> strings标准库包主要涉及字符串的基本操作. 常见字符串的操作有: 字符串求长度 求子串 是否存在某个字符或者子串 子串出 ...

  3. go中 -strconv包的使用

    strconv 包中的函数和方法 // atob.go ------------------------------------------------------------ // ParseBoo ...

  4. JAVA套料程序_Nest4J是一款基于Java作为开发语言的Nest算法包

    Nest4J Nest4J是一款基于Java作为开发语言的Nest算法包.可以看做一款能在服务端进行运行计算的Nest算法库. 基于SVGNest进行了Java化的改造. 同样这也作为了我本科的毕业设 ...

  5. Go语言用GoPacket抓包分析

    前言 离线pcap包解析 离线数据包分析源码分析 新建packetSource 读取数据包 注意点 前言 最近有了一个抓取网络数据包来分析的需求,最近在使用go语言,于是乎,决定是用go语言来进行抓包 ...

  6. R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集、并启动Rattle图形用户界面、数据集变量重命名,为数据集结果变量添加标签、数据划分(训练集、测试集、验证集)、随机数设置

    R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集.并启动Rattle图形用户界面.数据集变量重命名,为数据集结果变量添加标签.数据划分(训练集.测试集.验证集).随机数设置 目录

  7. R语言安装.tar.gz包

    R语言安装.tar.gz包 # 以ElemStatLearn包的安装为例 # "package 'ElemStatLearn' is not available for this versi ...

  8. R语言中的数据处理包dplyr、tidyr笔记

    R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其 ...

  9. Java语言中的常用包、访问控制

    Java常用的语言包 Java的核心类都放在Java包以及其子包下,Java扩展的许多类都放在Javax包以及其子包下.这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别 ...

  10. r语言导入ggplot2_R语言绘图之ggplot2包

    R语言绘图之ggplot2包 (2018-09-25 03:09:30) 6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图. R的基础包里面也有很多画图函数,例如plot();ba ...

最新文章

  1. linux下安装nvm进行node的版本的快速切换
  2. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引
  3. Android硬件抽象层(HAL)概要介绍和学习计划 1转
  4. c语言中用简易暗纹来输入密码,确定夫琅和费单缝衍射明、暗纹位置的不同教学方法的讨论...
  5. mysql max字符串数值_针对字符串值的mysql:min()和max()。
  6. mysql json 引号 双引号_关于JSON字符串key缺少双引号的解决方法 的讲解
  7. 用友u8采购发票如何取消审核
  8. Dapper Sqlpara where in
  9. php utc时区设置,php DateTimeZone 设置UTC 无效
  10. Eclipse离线安装Svn插件
  11. JS实现将文件和base64的相互转换
  12. 最强数据集集合:50个最佳机器学习公共数据集丨资源
  13. yum install 命令报错Could not retrieve mirrorlist
  14. 怎么学好html5和css3,如何提高你的CSS水平
  15. boost 普通用户读取SYSTEM创建的共享内存
  16. LED技术50年秘史回顾:从指示灯到街灯
  17. height和line-height的区别(简单易懂)
  18. 单目摄像头检测输出 3D 边界框
  19. 红石模拟器android,Win10 Mobile红石3支持x86模拟器
  20. 200、无线网桥与无线AP的带机量是多少?一篇文章搞明白

热门文章

  1. LINUX SHELL判断一个用户是否存在
  2. 代码中目录是否以分隔符结尾的再讨论
  3. CSDN的访问数据,真是破绽百出
  4. python3中报错No module named 'numpy'
  5. 领导公开对你有成见,关键在于是否影响公司决策
  6. LinkedList的线程安全解决办法
  7. 管理感悟:先做事,后做人
  8. php简化URL路径,thinkphp框架实现路由重定义简化url访问地址的方法分析
  9. 超神学院暗物质计算机,超神学院之进击的赛亚人
  10. 关于C#使用DataContractJsonSerializer来进行JSON解析