当前位置: 首页 > news >正文

go语言-字符串处理的常用函数

本文介绍go语言处理字符串类型的常见函数。

多行字符串

在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 (``) 。


str := `This is amultilinestring.`

字符串的拼接-join


// fmt.Sprintf方式拼接字符串str1 := "abc"str2 := "def"str1_2 := fmt.Sprintf("%s%s", str1, str2)fmt.Printf("str1_2: %s\n", str1_2) //abcdef// strings.join方式collectstring1 := strings.Join([]string{"aaa", "bbb", "ccc"}, "-")fmt.Printf(collectstring1) // aaa-bbbfmt.Println()

字符串的类型转换

其他类型转换为字符串-formatint

  • FormatFloat接受4个参数,第一个参数就是待转换的浮点数,第二个参数表示我们希望转换之后得到的格式。一共有’f’, ‘b’, ‘e’, ‘E’, ‘g’, 'G’这几种格式。

‘f’ 表示普通模式:(-ddd.dddd)

‘b’ 表示指数为二进制:(-ddddp±ddd)

‘e’ 表示十进制指数,也就是科学记数法的模式:(-d.dddde±dd)

‘E’ 和’e’一样,都是科学记数法的模式,只不过字母e大写:(-d.ddddE±dd)

‘g’ 表示指数很大时用’e’模式,否则用‘f’模式

‘G’ 表示指数很大时用’E’模式,否则用’f’模式

// int 转化为字符串var num1 int = 99str := fmt.Sprintf("%d", num1)fmt.Printf("str type %T str=%q\n", str, str) // str type string str="99"var myChar byte = 'h'str = fmt.Sprintf("%c", myChar)fmt.Printf("str type %T str=%q\n", str, str) // str type string str="h"var num2 int = 99// 转换为2进制格式的字符串str = strconv.FormatInt(int64(num2), 2)fmt.Printf("str type %T str=%q\n", str, str) //str type string str="1100011"// 转换为10进制格式的字符串str = strconv.FormatInt(int64(num2), 10)fmt.Printf("str type %T str=%q\n", str, str) //str type string str="99"var num3 float32 = 23.2424// f 表示格式,2表示保留位数,64 表示这个num3是float32str = strconv.FormatFloat(float64(num3), 'f', 2, 32)fmt.Printf("str type %T str=%q\n", str, str) //str type string str="23.24"var num4 bool = truestr = strconv.FormatBool(num4)fmt.Printf("str type %T str=%q\n", str, str) //str type string str="true"var num5 = 99str = strconv.Itoa(num5)fmt.Printf("str type %T str=%q\n", str, str) //str type string str="99"

字符串转换为其他类型-parseint

  • 转为int

var str1 string = "99"// ParseInt返回的是int64n1, _ := strconv.ParseInt(str1, 10, 0)fmt.Printf("n1 type %T n1=%v\n", n1, n1) // n1 type int64 n1=99
  • 转为float

var str2 string = "99.2"// 2表示保留小数点位数n2, _ := strconv.ParseFloat(str2, 2)fmt.Printf("n2 type %T n1=%v\n", n2, n2) // n2 type float64 n1=99.2
  • 换为bool
var str string = "true"b, _ := strconv.ParseBool(str)fmt.Printf("b type %T b=%v\n", b, b)

字符串的比较-compare

语法:

cmp := strings.Compare(str1, str2)

cmp等于-1表示str1字典序小于str2,如果str1和str2相等,cmp等于0。如果cmp=1,表示str1字典序大于str2.


// 字符串必须fmt.Println(strings.Compare("abb", "bbb")) //-1fmt.Println(strings.Compare("cbb", "bbb")) //1fmt.Println(strings.Compare("bbb", "bbb")) //0

查找字符串的字串-index

var theInd = strings.Index(str, "sub")

我们可以用Index函数查找一个字符串中子串的位置,它会返回第一次出现的位置,如果不存在返回-1.

var theLastIdx = strings.LastIndex(str, "last")

类似的方法是LastIndex,它返回的是出现的最后一个位置,同样,如果不存在返回-1.


// 字符串查找是第几个字符fmt.Println(strings.Index("yes hello world hello", "hello")) //4,第一次出现的位置,是第4个字符fmt.Println(strings.Index("yes hello world hello", "Hello")) //-1 没找到fmt.Println(strings.LastIndex("yes hello world hello", "hello")) //16,最后一次出现的位置,第16个字符fmt.Println(strings.LastIndex("yes hello world hello", "Hello")) //-1 没找到

统计字串的次数-count/repeat

strings.Count("abcabcabababc", "abc")

第一个参数是母串,第二个参数是子串。如果子串为空,则返回母串的长度+1.

repeat := strings.Repeat("abc", 10)

用Repeat方法来讲字符串重复指定的次数

// 字串出现次数fmt.Println(strings.Count("abcabcabc", "abc")) //3fmt.Println(strings.Count("abcabcabc", "abcd")) //0fmt.Println(strings.Count("abcabcabc", "")) //结果为字符串长度加1=10// 字符串复制多次fmt.Println(strings.Repeat("abc", 3)) //abcabcabcfmt.Println(strings.Repeat("abc", 0)) //空串fmt.Println(strings.Repeat("abc", 1)) //abc

字符替换-replace

Replace函数接收四个参数,分别是字符串,匹配串和目标串,还有替换的次数。如果小于0,表示全部替换


// 字符串替换fmt.Println(strings.Replace("abcdabcd", "ab", "bb", 1)) //只替换一次,bbcdabcdfmt.Println(strings.Replace("abcdabcd", "ab", "bb", -1)) //bbcdbbcdfmt.Println(strings.Replace("abcd ab cd", " ", "", -1)) //去掉空格,结果为bbcdbbcd

字符串与切片的转换-split/join/fields


// split,字符串转换为slicefmt.Println(strings.Split("abc,def,xyz", ",")) //["abc","def","xyz"]// slice切片组合成字符串slice1 := []string{"abc", "def", "xyz"}fmt.Println(strings.Join(slice1, ","))//abc,def,xyz

func Fields(s string) []string

去除 s 字符串的空格符,并且按照空格分割返回 slice


fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz "))// Output:Fields are: ["foo" "bar" "baz"]

去掉头尾字符Trim


//去掉头尾字符串fmt.Println(strings.Trim("$ab$cd$", "$")) //ab$cdfmt.Println(strings.TrimRight("$abcd$", "$")) //$abcdfmt.Println(strings.TrimLeft("$abcd$", "$")) //abcd$

大小写转换-ToLower/ToUpper


// 大小写转换fmt.Println(strings.ToLower("Golang")) //golangfmt.Println(strings.ToUpper("Golang")) //GOLANG

判断是否包含字串-contains


// 判断包含字串fmt.Println(strings.Contains("hello world", "hello")) //truefmt.Println(strings.Contains("hello world", "Hello")) //false

判断前缀与后缀—HasPrefix/HasSufix


// 判断包含前缀与后缀fmt.Println(strings.HasPrefix("present", "pre")) //truefmt.Println(strings.HasSuffix("present", "sent")) //true

产生随机字符串

var source = rand.NewSource(time.Now().UnixNano())fmt.Println("source.Int63():", source.Int63()) //一个随机的int64数,2252798765959001229

package mainimport ("fmt""math/rand""time")/*产生随机数的方法*/var source = rand.NewSource(time.Now().UnixNano())const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"func main() {// 一个随机的int64数fmt.Println("source.Int63():", source.Int63()) //一个随机的int64数,2252798765959001229fmt.Println("int64(len(charset)):", int64(len(charset))) //62fmt.Println(source.Int63() % int64(len(charset))) // 小于62位的数fmt.Println(RandString(10))}func RandString(length int) string {// 产生length长度的随机串b := make([]byte, length)for i := range b {randInt64 := source.Int63()b[i] = charset[randInt64%int64(len(charset))]}return string(b)}

去掉开头或末尾几个字符串


// 截掉最后6个字符podname := "virt-launcher-kvm-xianwei-test-31-nwdg5"kvmname := podname[:len(podname)-6] //kvm-xianwei-test-31

相关文章:

  • 微服务架构中的关键组件:Dubbo、Nacos、Feign 和 Eureka
  • 【Spark系列5】Dataframe下常用算子API
  • springboot整合rabbitmq,及各类型交换机详解
  • SpringBoot+Redis如何实现用户输入错误密码后限制登录(含源码)
  • Go语言学习踩坑记
  • MacOS安装JDK+Maven+Idea插件+nvm等
  • 记录element-plus树型表格的bug
  • 重写Sylar基于协程的服务器(5、IO协程调度模块的设计)
  • Http请求Cookie失效问题
  • Visual Studio 2022 查看类关系图
  • 分享一个WPF项目
  • MongoDB的索引与索引字段的顺序
  • flask基于django大数据的证券股票分析系统python可视化大屏
  • 解决pandas写入excel时的ValueError: All strings must be XML compatible报错
  • Adobe Photoshop 2024 v25.4.0 - 专业的图片设计软件
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • es的写入过程
  • golang 发送GET和POST示例
  • HTTP那些事
  • python学习笔记 - ThreadLocal
  • rabbitmq延迟消息示例
  • Service Worker
  • Spark学习笔记之相关记录
  • tensorflow学习笔记3——MNIST应用篇
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue 2.3、2.4 知识点小结
  • vue-router 实现分析
  • vue的全局变量和全局拦截请求器
  • 翻译:Hystrix - How To Use
  • 浮动相关
  • 基于Android乐音识别(2)
  • 基于游标的分页接口实现
  • 解决iview多表头动态更改列元素发生的错误
  • 如何编写一个可升级的智能合约
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • (31)对象的克隆
  • (C语言)逆序输出字符串
  • (C语言)字符分类函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (多级缓存)多级缓存
  • (二)fiber的基本认识
  • (二)linux使用docker容器运行mysql
  • (分布式缓存)Redis持久化
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .java 9 找不到符号_java找不到符号
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net Redis的秒杀Dome和异步执行
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码