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

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

 ## 多行字符串

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

```

str := `This is a

multiline

string.`

```

## 字符串的拼接

```go

// 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-bbb

fmt.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'模式

```go

// int 转化为字符串

var num1 int = 99

str := 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是float32

str = 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 = true

str = strconv.FormatBool(num4)

fmt.Printf("str type %T str=%q\n", str, str) //str type string str="true"

var num5 = 99

str = strconv.Itoa(num5)

fmt.Printf("str type %T str=%q\n", str, str) //str type string str="99"

```

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

- 转为int

```go

var str1 string = "99"

// ParseInt返回的是int64

n1, _ := strconv.ParseInt(str1, 10, 0)

fmt.Printf("n1 type %T n1=%v\n", n1, n1) // n1 type int64 n1=99

```

- 转为float

```go

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

```go

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.

```go

// 字符串必须

fmt.Println(strings.Compare("abb", "bbb")) //-1

fmt.Println(strings.Compare("cbb", "bbb")) //1

fmt.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方法来讲字符串重复指定的次数

```go

// 字串出现次数

fmt.Println(strings.Count("abcabcabc", "abc")) //3

fmt.Println(strings.Count("abcabcabc", "abcd")) //0

fmt.Println(strings.Count("abcabcabc", "")) //结果为字符串长度加1=10

// 字符串复制多次

fmt.Println(strings.Repeat("abc", 3)) //abcabcabc

fmt.Println(strings.Repeat("abc", 0)) //空串

fmt.Println(strings.Repeat("abc", 1)) //abc

```

## 字符替换-replace

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

```

// 字符串替换

fmt.Println(strings.Replace("abcdabcd", "ab", "bb", 1)) //只替换一次,bbcdabcd

fmt.Println(strings.Replace("abcdabcd", "ab", "bb", -1)) //bbcdbbcd

fmt.Println(strings.Replace("abcd ab cd", " ", "", -1)) //去掉空格,结果为bbcdbbcd

```

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

```

// split,字符串转换为slice

fmt.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

```go

//去掉头尾字符串

fmt.Println(strings.Trim("$ab$cd$", "$")) //ab$cd

fmt.Println(strings.TrimRight("$abcd$", "$")) //$abcd

fmt.Println(strings.TrimLeft("$abcd$", "$")) //abcd$

```

## 大小写转换

```go

// 大小写转换

fmt.Println(strings.ToLower("Golang")) //golang

fmt.Println(strings.ToUpper("Golang")) //GOLANG

```

## 判断是否包含字串-contains

```go

// 判断包含字串

fmt.Println(strings.Contains("hello world", "hello")) //true

fmt.Println(strings.Contains("hello world", "Hello")) //false

```

## 判断前缀与后缀---HasPrefix/HasSufix

```go

// 判断包含前缀与后缀

fmt.Println(strings.HasPrefix("present", "pre")) //true

fmt.Println(strings.HasSuffix("present", "sent")) //true

```

## 产生随机字符串

```go

var source = rand.NewSource(time.Now().UnixNano())

fmt.Println("source.Int63():", source.Int63()) //一个随机的int64数,2252798765959001229

```

```go

package main

import (

"fmt"

"math/rand"

"time"

)

/*

产生随机数的方法

*/

var source = rand.NewSource(time.Now().UnixNano())

const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

func main() {

// 一个随机的int64数

fmt.Println("source.Int63():", source.Int63()) //一个随机的int64数,2252798765959001229

fmt.Println("int64(len(charset)):", int64(len(charset))) //62

fmt.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

```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt学习笔记】(一)初识Qt

Qt学习笔记 1 使用Qt Creator 新建项目2 项目代码解释3 创建第一个 Hello World 程序4 关于内存泄漏问题5 Qt 中的对象树6 关于 qDebug()的使用7 使用其他方式创建一个 Hello World 程序(编辑框和按钮方式)8 关于 Qt 中的命名规范…

【Python_PySide6学习笔记(三十二)】无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示

无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示 无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示前言一、无边框窗体设置二、点击任务栏图标显示和隐藏设置三、实现效果无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示 前言 本文介绍基于 …

docker 无法执行systemctl

docker 无法执行systemctl:System has not been booted with systemd as init system (PID 1). Cant operate. Failed to connect to bus: Host is down 背景 System has not been booted with systemd as init system (PID 1). Cant operate. Failed to connect to bus: Hos…

九、图表使用

一、QCharts概述 Qt图表提供了:折线图、样条曲线图、面积图、散点图、条形图、饼图、方块胡须图、蜡烛图、极坐标图。1、QChart介绍 Qt Charts基于Qt的QGraphics View架构,其核心组件是QChartView和QChartQChartView是显示图标的视图,基类为…

【SpringBoot系列】自动装配的魅力:Spring Boot vs 传统Spring

IT行业有哪些证书含金量高? 文章目录 IT行业有哪些证书含金量高?强烈推荐前言区别项目配置:依赖管理:内嵌服务器:开发体验: 实例Spring项目示例:Spring Boot项目示例: 总结强烈推荐专栏集锦写在最后 强烈…

飞致云开源社区月度动态报告(2024年1月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)

管理组件状态 一、概述 在应用中,界面通常都是动态的。下图所示,在子目标列表中,当用户点击目标一,目标一会呈现展开状态,再次点击目标一,目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…

elk之基础概念

写在前面 本文一起看下es的基础概念,比较枯燥的内容说,但不看又不行。开始。 1:document 文档,是es搜索存储数据的最小单元,相当于是MySQL的一行记录,但es中是一个json,如下是一个通过logsta…

kuboard-spray 导入离线资源包

下载镜像 # 1. 在一台可以联网的机器上执行 docker pull registry.cn-shanghai.aliyuncs.com/kuboard-spray/kuboard-spray-resource:spray-v2.18.0a-8_k8s-v1.23.9_v1.16-amd64 docker save registry.cn-shanghai.aliyuncs.com/kuboard-spray/kuboard-spray-resource:spray-v…

websocket编写聊天室

【黑马程序员】WebSocket打造在线聊天室【配套资料源码】 总时长 02:45:00 共6P 此文章包含第1p-第p6的内容 简介 温馨提示:现在都是第三方支持聊天,如极光,学这个用于自己项目完全没问题,大项目不建议使用 需求分析 代码

8、应急响应-战前溯源反制主机蜜罐系统HFishHIDSElkeidWazuh

用途:个人学习笔记,欢迎指正 目录 背景: 一、潮源反制-平台部署-蜜罐-Hfish 二、溯源反制-平台部署-HIDS-Wazuh 三、溯源反制-平台部署-HlDS-Elkeid-hub 背景: 攻击者对服务器存在着各种威胁行为,作为安全人员&am…

WebAssembly核心编程[1]:wasm模块实例化的N种方式

当我们在一个Web应用中使用WebAssembly,最终的目的要么是执行wasm模块的入口程序(通过start指令指定的函数),要么是调用其导出的函数,这一切的前提需要创建一个通过WebAssembly.Instance对象表示的wasm模块实例(源代码…

远程教育:低代码在教育技术领域的重塑之力

新冠肺炎大流行对世界各地的行业产生了影响,其中一些行业的影响远远超过其他行业。食品、零售、供应链、娱乐和航空业是受影响最大的行业,为确保不间断运营,这引发了一场数字革命。相信,这种数字化的采用将长期保持下去&#xff0…

STM32—系统定时器

1.SysTick简介 SysTick是一种系统定时器,可以用于实现操作系统、任务调度、时钟管理等功能。它通常集成在微控制器中,并且是硬件实现的,具有高精度和可靠性。 在ARM Cortex-M处理器中,SysTick定时器可以配置为计数器模式或外部时…

力扣hot100 数组中的第K个最大元素 堆 三路划分

Problem: 215. 数组中的第K个最大元素 文章目录 思路复杂度Code 思路 👨‍🏫 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) Code class Solution {public int findKthLargest(int[] nums, int k…

5种改进生产 Web 应用服务器设置的方法

简介 一旦你的应用程序在云服务器环境中运行起来,你可能会想知道如何改进你的服务器环境,使其从“能用”跃升到一个完整的生产环境。本文将帮助你开始规划和实施生产环境,通过在云服务器环境中创建一个“生产环境”的宽泛定义,并…

Java:搭建eladmin复习mvn、springboot、vue等

目录 1.源码平台后端: 2.源码平台前端: 3.操作系统:centos7.9 4.mysql:5.7.x 安装 5.redis:5.0.X 6.maven:3.8 7.java:1.8: 8.nodejs:16.x 9.通过mvn打包eladmin后端 10.npm打包前端项目进行部署 11.访问测试…

电子文件归档管理有哪些方法

电子文件归档管理有以下几种方法: 1. 按文件类型归档:将电子文件根据文件类型进行归档管理,如将所有的文档文件放在一个文件夹中,所有的图像文件放在另一个文件夹中,便于管理和查找。 2. 按时间归档:将电子…

力扣经典题目:循环队列

1.虽然是循环队列,但需要提供一个队列为满的情况,所以,要设立一个空的队列元素,当最后一个元素的next指针加一等于第一个元素的时候为满 2.可以增加一个size记录元素个数,当size为0的时候为空,当size为目标…

操作股票的强化学习实现

实现一个操作股票的强化学习模型需要几个关键步骤。以下是一个基本的实现流程: 1. 环境设定 首先,我们需要定义一个环境,该环境会模拟股票市场的动态。环境需要至少提供以下功能: 重置(Reset)&#xff1…