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
}

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

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

相关文章

二元函数图像3d绘制(Python)

1.简单的二元函数 举例&#xff1a;,等等较易实现&#xff0c;用一个函数&#xff0c;并直接返回表达式即可。 def func(x, y):return x*y*(xy)/2 再分别定义x,y的范围与步长&#xff0c;并设置角度、颜色坐标即可。以函数 为例&#xff0c;以下是实现代码&#xff0c;可供参…

SimpleCG小游戏开发系列(1)--扫雷

一、前言 前面我们学习了SimpleCG的游戏开发框架,从本篇开始,我们用一系列小游戏的开发来加深对框架的了解.我们先以windows的经典游戏--扫雷,作为首个例子。游戏预览如下 二、框架搭建 因为游戏程序的大体框架差不多&#xff0c;所以我们可以搭建一个通用的主程序。如下所示&a…

怎么把dwg格式转换pdf?

怎么把dwg格式转换pdf&#xff1f;DWG是一种由AutoCAD开发的二维和三维计算机辅助设计&#xff08;CAD&#xff09;文件格式&#xff0c;它的名称是“绘图&#xff08;Drawing&#xff09;”的缩写。DWG文件通常包含了设计图纸、模型和元数据等信息&#xff0c;并且被广泛用于工…

金润etc推动交通行业的数字化进程

金润etc是金润科技以ETC为切入点&#xff0c;深耕交通物流行业&#xff0c;致力于成为交通生态的数据科技服务平台。为了实现这一目标&#xff0c;金润数科提供了全面的交通生态解决方案&#xff0c;包括智慧路况监测、智能停车和智慧运维等。这些解决方案可以帮助城市交通更加…

Vue3-ElementPlus按需导入

1.安装 pnpm add element-plus 2.配置按需导入&#xff1a; 官方文档&#xff1a;快速开始 | Element Plus 按照官网按需导入中的自动导入步骤来进行 pnpm add -D unplugin-vue-components unplugin-auto-import 观察Vite代码与原vite文件的差别&#xff0c;将原vite文件中没…

c# 简单web api接口实例源码分析

CreateHostBuilder(args).Build().Run();这句语句处于c#webapi程序的第一句&#xff0c;它的作用是&#xff1a;启动接口的三个步骤&#xff1a; 创建一个HostBuilder对象。执行IHostBuilder.Build()方法创建IHost对象。执行IHost.Run()方法启动。 创建和配置Host&#xff08;…

【brpc学习实践九】mbvar及bvar可观测

概念、学习地址 mbvar中有两个类&#xff0c;分别是MVariable和MultiDimension&#xff0c;MVariable是多维度统计的基类&#xff0c;MultiDimension是派生模板类。也是主要用来多多线程计数用的。这里用到再详细去了解即可 https://github.com/luozesong/brpc/blob/master/do…

python基于YOLOv7系列模型【yolov7-tiny/yolov7/yolov7x】开发构建钢铁产业产品智能自动化检测识别系统

在前文的项目开发实践中&#xff0c;我们已经以钢铁产业产品缺陷检测数据场景为基准&#xff0c;陆续开发构建了多款目标检测模型&#xff0c;感兴趣的话可以自行阅读即可。 《YOLOv3老矣尚能战否&#xff1f;基于YOLOv3开发构建建钢铁产业产品智能自动化检测识别系统&#xf…

Python语言学习笔记之五(Python代码注解)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 注解与注释是不一样的&#xff0c;注解有更广泛的应用&#xff1b; 通过注解与注释都能提高代码的可读性和规…

python学习过程中一些问题记录总结

工作机器上安装了 两个环境 使用anaconda3 时配置仓库地址不能 拉取到 cv2 DBUtils 使用python2 时 版本低&#xff0c;拉取不到 解决办法&#xff0c;python2不支持下载最新版本的&#xff0c;需要指定下载一个老的版本即可&#xff0c;下个1.3的就OK了 pip install DBU…

华为电视盒子 EC6108V9C 刷机成linux系统

场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 家里装宽带的时候会自带电视盒子&#xff0c;但是由于某些原因电视盒子没有用&#xff0c;于是就只能摆在那里吃土&#xff0c;闲来无事&#xff0c;搞一下 问题描述 提示&#xff1a;这里描述项目中遇到…

【嵌入式】开源shell命令行的移植和使用(2)——letter-shell

目录 一 背景说明 二 移植准备 三 移植过程 四 自定义命令 五 实际使用 一 背景说明 之前使用过一款开源shell工具 nr_micro_shell &#xff08;【嵌入式】开源shell命令行的移植和使用&#xff08;1&#xff09;——nr_micro_shell-CSDN博客&#xff09;&#xff0c;感觉…