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

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

```

相关文章:

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

本文介绍go语言处理字符串类型的常见函数。 ## 多行字符串 在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 () 。 str : This is a multiline string. ## 字符串的拼接 go // fmt.Sprintf方式拼接字符串 str1 : "abc" str2 : "def" …...

DevOps落地笔记-05|非功能需求:如何有效关注非功能需求

上一讲主要介绍了看板方法以及如何使用看板方法来解决软件研发过程中出现的团队过载、工作不均、任务延期等问题。通过学习前面几个课时介绍的知识,你的团队开始源源不断地交付用户价值。用户对交付的功能非常满意,但等到系统上线后经常出现服务不可用的…...

vs 撤销本地 commit 并保留更改

没想到特别好的办法,我想的是用 vs 打开 git 命令行工具 然后通过 git 命令来撤销提交,尝试之前建议先建个分支实验,以免丢失代码, git 操作见 git 合并多个 commit / 修改上一次 commit...

深度解读NVMe计算存储协议-1

随着云计算、企业级应用以及物联网领域的飞速发展,当前的数据处理需求正以前所未有的规模增长,以满足存储行业不断变化的需求。这种增长导致网络带宽压力增大,并对主机计算资源(如内存和CPU)造成极大负担,进…...

CHS_06.2.3.4_2+用信号量实现进程互斥、同步、前驱关系

CHS_06.2.3.4_2用信号量实现进程互斥、同步、前驱关系 知识总览信号量机制实现进程互斥信号量机制实现进程同步信号量机制实现前驱关系 知识回顾 各位同学 大家好 在这个小节中 我们要学习怎么用信号量机制来实现进程的同步互制关系 知识总览 那么 我们之前学习了互斥的几种软…...

Web实战丨基于Django的简单网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于django的简单网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795604 Django简介 Django 是一个用 Python 编写的高…...

mysql8安装基础操作(一)

一、下载mysql8.0 1.查看系统glibc版本 这里可以看到glibc版本为2.17,所以下载mysql8.0的版本时候尽量和glibc版本对应 [rootnode2 ~]# rpm -qa |grep -w glibc glibc-2.17-222.el7.x86_64 glibc-devel-2.17-222.el7.x86_64 glibc-common-2.17-222.el7.x86_64 gl…...

MIT6.5830 实验0

前置 本次实验使用 Golang 语言实现,在之前的年份中,都是像 cs186 那样使用 Java 实现。原因: Golang 语言作为现代化语言,简单易上手但功能强大。 使参加实验的同学有同一起跑线,而不是像Java那样,有些同…...

【简便方法和积累】pytest 单元测试框架中便捷安装插件和执行问题

又来进步一点点~~~ 背景:之前写了两篇关于pytest单元测试框架的文章,本篇内容对之前的做一个补充 一、pytest插件: pytest 有非常多的插件,很方便,以下为插件举例: pytest,pytest-html&#x…...

Zabbix数据库分离与邮件报警

基础环境:要有zabbix服务端与被监控端实验目标:源数据库与服务端存放在一台服务器上,分离后源数据库单独在一台服务器上,zabbix服务端上不再有数据库。环境拓扑图: 实验步骤: 1.在8.7服务器上安装相同版本…...

mybatisplus-多数据源配置

1. 流程 pom文件yml配置多数据源具体服务添加注解DS(“***”) 1.pom文件 <!--mybatis plus 起步依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</vers…...

微信小程序(二十八)网络请求数据进行列表渲染

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.GET请求的规范 2.数据赋值的方法 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"item">&…...

ubuntu22.04 安装conda

要在Ubuntu 22.04上安装Anaconda&#xff0c;可以遵循以下步骤&#xff1a; 首先&#xff0c;打开终端并更新系统包仓库&#xff0c;也需要安装curl工具&#xff0c;这可以通过以下命令完成&#xff1a; sudo apt update && sudo apt install curl -y使用curl命令行工具…...

W801学习笔记十:HLK-W801制作学习机/NES游戏机(总结)

本章总结一下整个开发过程中遇到的问题&#xff1a; 1、引脚的抗干扰问题&#xff1a; 屏幕显示的时候&#xff0c;概率出现花屏。无论怎么修改代码都不能解决&#xff0c;一个偶然的机会&#xff0c;发现当手触摸屏幕的WR和CS引脚时&#xff0c;屏幕会正常。查阅资料&#x…...

《HTML 简易速速上手小册》第6章:HTML 语义与结构(2024 最新版)

文章目录 6.1 语义化标签的重要性6.1.1 基础知识6.1.2 案例 1&#xff1a;使用 <article>, <section>, <aside>, <header>, 和 <footer>6.1.3 案例 2&#xff1a;构建带有嵌套语义化标签的新闻网站6.1.4 案例 3&#xff1a;创建一个带有 <mai…...

分析HarmonyOS应用/服务的CPU活动性能

CPU Profiler 性能分析是用来分析CPU性能瓶颈的工具&#xff0c;可以实时查看应用/服务的CPU使用率和线程活动&#xff0c;也可以查看记录的方法跟踪数据、方法采样数据和系统跟踪数据的详情。基于CPU性能分析&#xff0c;您可以了解在一段时间内执行了哪些方法&#xff0c;以及…...

Linux:理解信号量以及内核中的三种通信方式

文章目录 共享内存的通信速度消息队列msggetmsgsndmsgrcvmsgctl 信号量semgetsemctl 内核看待ipc资源单独设计的模块ipc资源的维护 理解信号量总结 本篇主要是基于共享内存&#xff0c;延伸出对于消息队列和信号量&#xff0c;再从内核的角度去看这三个模块实现进程间通信 共享…...

【ArcGIS微课1000例】0100:ArcGIS for CAD软件下载与安装(附安装包)

ArcGIS for CAD软件下载与安装(附安装包)。 文章目录 一、ArcGIS for CAD概述1. ArcGIS for CAD介绍2. 主要功能二、ArcGIS for CAD下载三、ArcGIS for CAD安装1. 安装CAD2. 安装ArcGIS for CAD3. 配置一、ArcGIS for CAD概述 1. ArcGIS for CAD介绍 ArcGIS for CAD是Esri提…...

Django模型(一)

一、介绍 模型&#xff0c;就是python中的类对应数据库中的表 1.1、ORM ORM 就是通过实例对象的语法&#xff0c;完成关系型数据库的操作的技术&#xff0c;是"对象-关系映射"&#xff08;Object/Relational Mapping&#xff09; 的缩写 ORM 把数据库映射成对象 1.…...

【ChatGPT】文本向量化与余弦相似度:揭开文本处理的神秘面纱(5)

1、引言 在这个数字化的时代&#xff0c;我们每天都会面对大量的文本信息&#xff0c;从社交媒体到新闻报道&#xff0c;文本无处不在。但是&#xff0c;计算机要如何理解和处理这些文字呢&#xff1f;本文将为大家揭开其中的一些奥秘&#xff0c;详细解释文本向量化的概念&am…...

VLC隐藏玩法:结合Lua脚本实现智能视频播放(比如根据时间切换片单)

VLC隐藏玩法&#xff1a;结合Lua脚本实现智能视频播放 你是否厌倦了手动切换播放列表&#xff1f;VLC作为一款开源多媒体播放器&#xff0c;其真正的潜力远不止于基础播放功能。通过Lua脚本接口&#xff0c;我们可以解锁VLC的自动化能力&#xff0c;实现根据时间、文件存在与否…...

EI、SCI、Scopus傻傻分不清?一文讲透工程领域核心期刊数据库怎么选

EI、SCI、Scopus三大数据库深度解析&#xff1a;工程领域学术发表策略指南 当你在实验室熬夜修改论文最后一组数据时&#xff0c;是否思考过这样一个问题&#xff1a;这篇凝聚心血的成果究竟该投向哪个期刊&#xff1f;国内某重点高校的职称评审会上&#xff0c;两位候选人的学…...

Image2.0生成的PPT图片转换成可编辑的PPT的一种方法

老弟&#xff0c;PPT不想做&#xff0c;用AI生成的PPT图片编辑不了很烦恼是吧&#xff0c;俺有一法&#xff01;~ Edit Banana&#xff08;最强&#xff0c;开源免费&#xff09; 能把 AI 图→可编辑 PPTX / DrawIO / SVG 原理&#xff1a;用 SAM 分割图标 / 形状&#xff0c;用…...

SQL 语句:从产生、发展到内容全景

引言&#xff1a;数据世界的通用语言 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是当今数据领域最核心、最通用的语言。无论是数据分析师、后端工程师还是数据科学家&#xff0c;都离不开 SQL。它就像数据世界的“普通话”&#xff0c;连…...

给老系统装一层 “能办事的 AI”:企业 Agent 卡住的最后一步,SkillsUI 想补上

让我们从一个所有做企业 Agent 的人都遇到过的具体场景说起。某券商风控员要给客户开通融资融券账户&#xff0c;传统流程是这样的&#xff1a;登录 OA 提风控审批 → 跳到 CRM 拉客户资料 → 跳到风控系统填评估表 → 跳到电子签平台发签约链接 → 回 OA 关单。十几个字段反复…...

CANN HCCL-COMM 通信拓扑感知:16卡训练时为什么 rank3 总是最慢的那张

### CANN HCCL-COMM 通信拓扑感知&#xff1a;16卡训练时为什么 rank3 总是最慢的那张 去年搭了一台 8 卡 Atlas 800 服务器做 LLaMA 预训练&#xff0c;一切顺利。后来集群扩到 3 台共 24 卡&#xff0c;单卡吞吐从 1.2 tokens/s 掉到 0.7。不是线性下降&#xff0c;是断崖式…...

Unity资源提取原理与uTinyRipper实战指南

1. 为什么你第一次打开uTinyRipper时会“卡在加载界面”——这不是软件坏了&#xff0c;是Unity资源结构在对你说话 “零基础入门&#xff1a;uTinyRipper Unity资产提取完全指南”这个标题里藏着一个被绝大多数新手忽略的关键前提&#xff1a; uTinyRipper不是万能解包器&…...

用 5 款全栈电商微系统打通你的前后端核心逻辑链路(附级联 Prompt)

各位大前端、全栈开发以及正在寻求技术进阶的同仁们&#xff0c;大家好。在日常的技术社区里&#xff0c;我们经常能看到各种流于表面的前端 UI 静态页或者几行代码拼凑的后端 CRUD 示例。但真正能在一个全栈工程师的履历中起到定海神针作用的&#xff0c;往往是那些功能内敛、…...

Taotoken 多模型聚合能力如何赋能智能客服场景的快速迭代

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken 多模型聚合能力如何赋能智能客服场景的快速迭代 智能客服系统的核心在于其对话生成的质量与稳定性。产品经理与开发者在优…...

API调用总失败?ChatGPT官方Rate Limit机制深度拆解,4类高频报错代码级诊断手册

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;API调用总失败&#xff1f;ChatGPT官方Rate Limit机制深度拆解&#xff0c;4类高频报错代码级诊断手册 ChatGPT API 的速率限制&#xff08;Rate Limit&#xff09;并非黑盒策略&#xff0c;而是由 OpenAI 明确…...