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

Go字符串类型

一、字符串

1、字符串
  • Go 语言里的字符串的内部实现使用 UTF-8 编码
  • 字符串带的值为双引号(")中的内容,可以在 Go 语言的源码中直接添加非ASCII 码字符
s1 := "hello"
s2 := "您好"
2、字符串转义符
  • Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等

package mainimport ("fmt"
)func main() {fmt.PrintIn("str := \"c:\\Code\\demo\\go.exe\"") // str := "c:\Code\demo\go.exe"
}
3、多行字符串
  • 反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出
package main
import ("fmt"
)
func main() {s1 := `第一行第二行第三行`fmt.Println(s1)
}
4、byte 和 rune
  • Go 语言的字符有以下两种

uint8 类型,或者叫 byte 型:代表了 ASCII 码的一个字符

rune 类型:代表一个 UTF-8 字符

  • 字符串底层是一个 byte 数组,所以可以和[]byte 类型相互转换
  • 字符串是不能修改的 字符串是由 byte 字节组成 所以字符串的长度是 byte 字节的长度
  • rune 类型用来表示 utf8 字符,一个 rune 字符由一个或多个 byte 组成
package mainimport "fmt"func main(){//"比赛第一"s := "比赛第一"s_rune := []rune(s)fmt.PrintIn("友谊"+string(s_rune[2:]))    //友谊第一
}

二、字符串常用操作

方法介绍
len(str)求长度
+或 fmt.Sprintf拼接字符串
strings.Split分割
strings.Contains判断是否包含
strings.HasPrefix,strings.HasSuffix前缀/后缀判断
strings.Index(),strings.LastIndex()子串出现的位置
strings.Join(a[]string,sep string)join 操作
1、len(str)
package mainimport "fmt"func main(){var str = "this is str"fmt.PrintIn(len(str)) //11
}
2、+(拼接)
package mainimport "fmt"func main() {var str1 = "您好"var str2 = "golang"fmt.PrintIn(str1 + str2)    //你好golang
}
3、strings.Split()
package mainimport ("fmt""strings"
)func main () {var s = "Running-Snail"var s1 = strings.Split(s,"-")fmt.PrintIn(s1) // [Running Snail]
}
4、strings.HasPrefix()
  • 首字符尾字母包含指定字符
package mainimport ("fmt""strings"
)func main() {//1.判断字符串 以 this 开头var str = "this is golang"var flag = strings.Hasprefix(str,"this")fmt.PrintIn(flag)    //true//2.判断字符串以 go 结尾var.flag2 = strings.HasSuffix(str,"go")fmt.PrintIn(flag2)    //false
}
5、strings.Index()
  • 判断字符串出现的位置
package mainimport ("fmt""strings"
)func main() {var str = "this is golang"var index =strings.Index(str,"go")fmt.PrintIn(index)    // 8 (判断字符串 go 出现的位置)
}
6、strings.Join()
package main import ("fmt""strings"
)func main() {var str = "Running-Snail"var arr = strings.Split(str,"-")     // [Running Snail]var str2 =strings.Join(arr,"*")      // Running*Snailfmt.PrintIn(arr)fmt.PrintIn(str2)
}   
7、单引号
  • 组成每个字符串的元素叫做“字符”,可以通过遍历字符串元素获得字符,字符用单引号(')
  • uint8类型,或者叫 byte 类型,代表 ASCII 码的一个字符
  • rune 类型,代表一个 UTF-8 字符
package mainimport "fmt"func main(){a := 'a'name := "snail"//当我们直接输出 byte(字符)的时候输出的是这个字符对应的码值fmt.PrintIn(a)    // 97 这里输出的是 a 字符串的 ASCII 值fmt.PrintIn(name)    // snail//如果我们要输出这个字符,需要格式化输出fmt.Printf("的值是%c",a)    //a的值是 a
}

三、字符串遍历

1、遍历字符串
package mainimport "fmt"func main(){s := "hello snail"for i := 0; i<len(s);i++ { //bytefmt.Printf("%v(%c)",s[I],s[I])// 104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 115(s) 110(n) 97(a) 105(i) 108(l) }fmt.PrintIn()    //打印一个换行for _,r := range s { //runefmt.Prinf("%v=>%c",r,r)//104=>h 101=>e 108=>l 108=>l 111=>o 32=>  115=>s 110=>n 97=>a 105=>i 108=>l}
}
2.修改字符串
  • 要修改字符串,需要先将其转换成[]rune或 byte,完成后再转换为 string
  • 无论那种转换,都会重新分配内存,并复制字节数组
package mainimport "fmt"func main(){s1 := "snail"//强制类型转换byteS := []byte(s1)byteS1[0] = 'p'fmt.PrintIn(string(byteS1))    //pnail s2 := "白萝卜"runeS2 := []rune(s2)runeS2[0] = '红'fmt.PrintIn(string(runeS2))    //红萝卜
}

四、转 String

1、sprintf 转 string
  • 注意:sprintf 使用中需要注意转换的格式
    • int 为%d
    • float 为%f
    • bool 为%t
    • byte 为%c
package mainimport "fmt"func main() {var i int = 20var f float64 = 12.456var t bool = truevar b byte = 'a'var strs stringstrs=fmt.Sprintf("%d",i)    //把int 转换成 stringfmt.Printf("类型: %T,值=%v\n",strs,strs)    //类型:string,值 =20strs= fmt.Sprintf("%f",f)    //把 float转换成 stringfmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=12.456000strs = fmt.Sprintf("%t", t)  // 把 bool 转换成 stringfmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=truestrs = fmt.Sprintf("%c", b)  // 把 byte  转换成 stringfmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=a
}
2、strconv
package  mainimport ("fmt""strconv"
)fun main () {//1、int转换成 stringvar num1 int = 20s1 := strong.Itoa(num1)fmt.Printf("类型:%T ,值=%v \n",s1,s1)    //类型:string,值=20//2、float 转 stringvar num2 float64 = 20.113123/*参数 1:要转换的值参数 2:格式化类型参数 3:保留的小数点 -1 (不对小数点格式化)参数 4:格式化的类型*/s2 := strconv.FormatFloat(num2,'f',2,64)fmt.Printf("类型: %T ,值=%v \n", s2, s2)  // 类型: string ,值=20.11// 3、bool 转 strings3 := strconv.FormatBool(true)fmt.Printf("类型: %T ,值=%v \n", s3, s3)  // 类型: string ,值=20.11//4、int64 转 stringvar num3 int64 = 20s4 := strconv.FormatInt(num3, 10)  /* 第二个参数10为 进制 */fmt.Printf("类型 %T ,值=%v \n", s4, s4)  // 类型 string ,值=20
}

五、String 转其他

1、string 转 int
package mainimport ("fmt""strconv"
)fun main() {var s = "1234"i64,_ := strconv.ParseInt(s,10,64)fmt.Printf("值:%v 类型:%T",i64,i64)    //值:1234 类型:int64
}
2、string 转 float
package mainimport ("fmt""strconv"
)    func main() {str := "3.1415926535"v1,_ := strconv.ParseFloat(str,32)v2,_ := strconv.ParseFloat(str,64)fmt.Printf("值:%v 类型:%T\n",v1,v1)    // 值:3.1415927410125732 类型:float64fmt.Printf("值:%v 类型:%T", v2, v2)  // 值:3.1415926535 类型:float64
}
3、string 转 bool
package main
import ("fmt""strconv"
)
func main() {b, _ := strconv.ParseBool("true")   // string 转 boolfmt.Printf("值:%v 类型:%T", b, b)  // 值:true 类型:bool
}
4、string 转字符
package mainimport "fmt"func main() {s := "hello snail"for _,r := range s{ //rune//104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 115(s) 110(n) 97(a) 105(i) 108(l) fmt.Printf("%v(%c)",r,r)}fmt.PrintIn()
}
5、字符串反转
package mainfunc Reverse(s string) string{r := []rune(s)for I,j:=0,len(r)-1;i<j;i,j=i+1,j-1 {r[I],r[j]=r[j],r[i]}return string(r)
}func main(){a := "Hello, Wrold"println(a)println(Reverse(a))  // dlorW ,olleH
}

相关文章:

Go字符串类型

一、字符串 1、字符串 Go 语言里的字符串的内部实现使用 UTF-8 编码字符串带的值为双引号&#xff08;"&#xff09;中的内容&#xff0c;可以在 Go 语言的源码中直接添加非ASCII 码字符 s1 : "hello" s2 : "您好" 2、字符串转义符 Go 语言的字符…...

DjiTello + YoloV5的无人机的抽烟检测

一、效果展示 注&#xff1a;此项目纯作者自己原创&#xff0c;创作不易&#xff0c;不经同意不给予搬运权限&#xff0c;转发前请联系我&#xff0c;源码较大需要者评论获取&#xff0c;谢谢配合&#xff01; 1、未启动飞行模型无人机的目标检测。 DjiTello YOLOV5抽烟检测 …...

数据库取多个时间字段的最大值

个人网站 要在数据库中取多个时间字段的最大值&#xff0c;可以使用SQL的GREATEST函数。假设有一个表my_table&#xff0c;其中有两个时间字段time1和time2&#xff0c;可以使用以下查询来获取这两个字段的最大值&#xff1a; SELECT GREATEST(time1, time2) AS max_time FRO…...

C/C++ 实现Socket交互式服务端

在 Windows 操作系统中&#xff0c;原生提供了强大的网络编程支持&#xff0c;允许开发者使用 Socket API 进行网络通信&#xff0c;通过 Socket API&#xff0c;开发者可以创建、连接、发送和接收数据&#xff0c;实现网络通信。本文将深入探讨如何通过调用原生网络 API 实现同…...

kotlin 防范竞态

当你调用成员&#xff0c;这个成员可能为null&#xff0c;可能为空值&#xff0c;就必须采用防范竞态条件&#xff0c;这个是 KT 编程的规范化 下面举例&#xff1a; 防范竞态条件【尽量使用 &#xff1f; 内置函数 空合并操作符】 fun test(){val info: String ? "&q…...

超分辨率重建

意义 客观世界的场景含有丰富多彩的信息&#xff0c;但是由于受到硬件设备的成像条件和成像方式的限制&#xff0c;难以获得原始场景中的所有信息。而且&#xff0c;硬件设备分辨率的限制会不可避免地使图像丢失某些高频细节信息。在当今信息迅猛发展的时代&#xff0c;在卫星…...

防止恶意攻击,服务器DDoS防御软件科普

作为一种恶意的攻击方式&#xff0c;DDoS攻击正以超出服务器承受能力的流量淹没网站&#xff0c;让网站变得不可用。近几年&#xff0c;这种攻击持续增多&#xff0c;由此优秀服务器DDoS防御软件的需求也随之增长。那么如何选择服务器DDoS防御软件&#xff0c;从根本上根除DDoS…...

nint和Pattern matching介绍(C#)

nint 最近看C# 9.0时&#xff0c;发现一个有意思的关键词&#xff0c;就是nint&#xff0c;第一次看到这个&#xff0c;于是好奇心爆棚&#xff0c;就去实际操作了一下。 nint i 1000; Console.WriteLine("i{0}", i);实际结果与int的结果是一样的&#xff0c;那为什…...

部署jenkins一直显示Please wait while Jenkins is getting ready to work

部署jenkins一直显示Please wait while Jenkins is getting ready to work … 需要你进入jenkins的工作目录 vim .jenkins/hudson.model.UpdateCenter.xml将https://updates.jenkins.io/update-center.json更换为更改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates…...

Redis性能压测、监控工具及优化方案

Redis是一款高性能的开源缓存数据库&#xff0c;但是在实际应用中&#xff0c;我们需要对Redis进行性能压测、监控以及优化&#xff0c;以确保其稳定性和高可用性。本文将介绍Redis性能压测、监控工具及优化方案。 01 Redis性能压测 常用的Redis性能压测工具有&#xff1a; …...

使用NVM管理多个Nodejs版同时本支持vue2、vue3

1.安装nvm,下载地址&#xff1a; https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12 2.nvm常用命令 Usage:nvm arch : Show if node is running in 32 or 64 bit mode.nvm current : Display active version.nvm debug …...

局域网的网络ip不稳定问题

在局域网的多个设备&#xff0c;互相通信时好时坏&#xff0c;不稳定。 遭遇过的情况如下&#xff1a; 用两个开发板&#xff1a;972开发板1和2&#xff0c;网口同时互相ping&#xff0c;出现1ping 2通--此时2ping 1不通&#xff0c;过段时间&#xff0c;1ping2不通--但2ping又…...

uniapp (vue3)生成二维码

在uni-app中生成二维码&#xff0c;我们可以使用第三方库qrcode.js。以下是一个简单的示例&#xff1a; 首先&#xff0c;我们需要安装qrcode.js库&#xff0c;可以通过npm进行安装&#xff1a; npm install qrcode然后&#xff0c;在你的Vue组件中引入并使用这个库&#xff…...

Android11编译第八弹:root用户密码设置

问题&#xff1a;user版本增加su 指令以后&#xff0c;允许切换root用户&#xff0c;但是&#xff0c;root用户默认没有设置密码&#xff0c;这样访问不安全。 需要增加root用户密码。 一、Linux账户管理 1.1 文件和权限 Linux一切皆文件。文件和目录都有相应的权限&#x…...

XML Schema中的attributeFormDefault

XML Schema中的attributeFormDefault属性&#xff0c;用以指定元素的属性默认是否必须带有命名空间前缀。 attributeFormDefault属性可以取值qualified或unqualified&#xff0c;默认值是unqualified。 当取值为qualified时&#xff0c;表示属性必须用命名空间作为前缀&#x…...

数据结构 / 结构体字节计算

1. 结构体的存储 结构体各个成员的地址是连续的结构体变量的地址是第一个成员的地址 2. 64位操作系统8字节对齐 结构体的总字节大小是各个成员字节的总和&#xff0c;字节的总和需要是最宽成员的倍数结构体的首地址是最宽成员的倍数结构体各个成员的偏移量是该成员字节的倍数…...

rancher2.6 docker版本部署

1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注&#xff1a; 上面命令中rancher的版本v2.6.5&#xff0c;仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本&#xff0c;在github上查看&#xff1a;Release Release v2.6.5 ranche…...

UE5人物残影学习(材质实现)

学习视频 UE4简单的材质球残影人教学&#xff0c;你学会了吗&#xff01;_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rY411q7Yb/?spm_id_from333.788.top_right_bar_window_history.content.click 结果预览 1.创建残值&#xff0c;混合模式勾选半透明 “混合模…...

Spring Boot 内置工具类

一、对象、数组、集合 ObjectUtils 1.获取对象的基本信息 // 获取对象的类名。参数为 null 时&#xff0c;返回字符串&#xff1a;"null" String nullSafeClassName(Object obj)// 参数为 null 时&#xff0c;返回 0 int nullSafeHashCode(Object object)// 参数…...

C语言--每日选择题--Day27

第一题 1. 对于代码段&#xff0c;问下面不可以表示a[1]地址的是&#xff08;&#xff09; int a[10]; A&#xff1a;&a[0] 1 B&#xff1a;a sizeof(int) C&#xff1a;(int*)&a 1 D&#xff1a;(int*)((char*)&a sizeof(int)) 答案及解析 A A&#xff1a;取到…...

WarcraftHelper:魔兽争霸III现代化兼容性修复与性能优化解决方案

WarcraftHelper&#xff1a;魔兽争霸III现代化兼容性修复与性能优化解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为经典的即…...

数据结构--基于顺序表实现通讯录项目

欢迎阅读本篇学习笔记。 作为计算机专业的学习记录&#xff0c;本文将系统梳理通讯录项目的相关知识点&#xff0c;从基础概念到代码实现逐步展开&#xff0c;便于后续复习巩固&#xff0c;这里我们会用到上篇的知识&#xff0c;&#xff08;如果其中有不懂的&#xff0c;大家可…...

排查linux CentOS7.6的mysql磁盘 I/O 延迟过高问题

一&#xff0c;问题影响 磁盘 I/O 延迟过高会直接导致&#xff1a; 系统整体卡顿&#xff1a;所有依赖磁盘读写的操作&#xff08;如日志写入、数据库读写、文件存储&#xff09;都会变慢业务响应超时&#xff1a;数据库查询、接口调用、服务启动等耗时大幅增加&#xff0c;甚至…...

Lingyuxiu MXJ LoRA进阶教程:负面Prompt强化NSFW过滤与画质提升方法

Lingyuxiu MXJ LoRA进阶教程&#xff1a;负面Prompt强化NSFW过滤与画质提升方法 1. 引言&#xff1a;从“能用”到“好用”的关键一步 如果你已经成功部署了Lingyuxiu MXJ LoRA创作引擎&#xff0c;并且用它生成了一些人像作品&#xff0c;那么恭喜你&#xff0c;你已经迈出了…...

Nacos权重配置实战:如何优雅实现服务实例的流量调度与平滑升级

1. 为什么需要Nacos权重配置&#xff1f; 第一次接触Nacos权重功能时&#xff0c;我也觉得这不过是个锦上添花的小功能。直到有次线上服务出现性能问题&#xff0c;才发现这个看似简单的配置项简直是运维人员的"救命稻草"。想象一下这样的场景&#xff1a;你们公司刚…...

MAI-UI-8B功能测评:视觉理解+动作规划,到底有多好用?

MAI-UI-8B功能测评&#xff1a;视觉理解动作规划&#xff0c;到底有多好用&#xff1f; 1. 重新定义GUI智能体&#xff1a;不只是聊天机器人 MAI-UI-8B的出现彻底改变了我们对AI智能体的认知。与市面上大多数只能进行文字对话的模型不同&#xff0c;它真正实现了"看得见…...

OpenSpec实战:从规范到代码的AI驱动开发工作流

1. OpenSpec实战&#xff1a;为什么我们需要规范驱动的开发 在传统开发流程中&#xff0c;最让人头疼的问题莫过于"代码写完了&#xff0c;但和需求文档对不上"。我见过太多项目在交付时才发现&#xff0c;开发人员理解的"用户登录功能"和产品经理描述的完…...

为什么顶尖AI工程团队把可解释性设计前置到需求阶段?——基于27个亿级AIAgent项目的数据归因分析

第一章&#xff1a;可解释性设计前置的战略价值与范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 在高风险决策场景&#xff08;如医疗诊断、金融授信与自动驾驶&#xff09;中&#xff0c;模型的“黑箱性”已从工程挑战升维为治理瓶颈。将可解释性&#xff08;XAI&a…...

3分钟搞定:YaeAchievement让你告别手动记录原神成就的烦恼

3分钟搞定&#xff1a;YaeAchievement让你告别手动记录原神成就的烦恼 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 还在为《原神》数百项成就的手动整理而头疼吗&#xff1f;YaeAchieve…...

人工智能Ai图像识别之纸箱破损图像识别 纸箱缺陷识别 纸箱潮湿识别 纸箱状态识别图像数据集 第10336期

纸箱缺陷图像识别数据集类别 Classes (4) 类别&#xff08;4&#xff09; carton box 纸箱 cracked carton box 破损的纸箱 opened carton box 打开的纸箱 wet carton box 湿纸箱数据集核心信息表信息类别具体内容数据集类别包含 4 类纸箱目标&#xff1a;carton box&#xff0…...