Go字符串类型

一、字符串

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

package main

import (
    "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 main

import "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 main

import "fmt"

func main(){
    var str = "this is str"
    fmt.PrintIn(len(str)) //11
}
2、+(拼接)
package main

import "fmt"

func main() {
    var str1 = "您好"
    var str2 = "golang"
    fmt.PrintIn(str1 + str2)    //你好golang
}
3、strings.Split()
package main

import (
    "fmt"
    "strings"
)

func main () {
    var s = "Running-Snail"
    var s1 = strings.Split(s,"-")
    fmt.PrintIn(s1) // [Running Snail]
}
4、strings.HasPrefix()
  • 首字符尾字母包含指定字符
package main

import (
    "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 main

import (
    "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*Snail
    fmt.PrintIn(arr)
    fmt.PrintIn(str2)
}   
7、单引号
  • 组成每个字符串的元素叫做“字符”,可以通过遍历字符串元素获得字符,字符用单引号(')
  • uint8类型,或者叫 byte 类型,代表 ASCII 码的一个字符
  • rune 类型,代表一个 UTF-8 字符
package main

import "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 main

import "fmt"

func main(){
    s := "hello snail"
    for i := 0; i<len(s);i++ { //byte
        fmt.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 { //rune
        fmt.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 main

import "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 main

import "fmt"

func main() {
    var i int = 20
    var f float64 = 12.456
    var t bool = true
    var b byte = 'a'
    var strs string
    
    strs=fmt.Sprintf("%d",i)    //把int 转换成 string
    fmt.Printf("类型: %T,值=%v\n",strs,strs)    //类型:string,值 =20

    strs= fmt.Sprintf("%f",f)    //把 float转换成 string
    fmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=12.456000

	strs = fmt.Sprintf("%t", t)  // 把 bool 转换成 string
	fmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=true

	strs = fmt.Sprintf("%c", b)  // 把 byte  转换成 string
	fmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=a
}
2、strconv
package  main

import (
    "fmt"
    "strconv"
)

fun main () {
    //1、int转换成 string
    var num1 int = 20
    s1 := strong.Itoa(num1)
    fmt.Printf("类型:%T ,值=%v \n",s1,s1)    //类型:string,值=20

    //2、float 转 string
    var 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 转 string
	s3 := strconv.FormatBool(true)
	fmt.Printf("类型: %T ,值=%v \n", s3, s3)  // 类型: string ,值=20.11

	//4、int64 转 string
	var num3 int64 = 20
	s4 := strconv.FormatInt(num3, 10)  /* 第二个参数10为 进制 */
	fmt.Printf("类型 %T ,值=%v \n", s4, s4)  // 类型 string ,值=20
}

五、String 转其他

1、string 转 int
package main

import (
    "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 main

import (
    "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 类型:float64
	fmt.Printf("值:%v 类型:%T", v2, v2)  // 值:3.1415926535 类型:float64
}
3、string 转 bool
package main
import (
	"fmt"
	"strconv"
)
func main() {
	b, _ := strconv.ParseBool("true")   // string 转 bool
	fmt.Printf("值:%v 类型:%T", b, b)  // 值:true 类型:bool
}
4、string 转字符
package main

import "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 main

func 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
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android开发:安卓13Wifi和热点查看与设置功能

近日对安卓热点功能做了一些技术验证&#xff0c;目的是想利用手机开热点给设备做初始化&#xff0c;用的是安卓13&#xff0c;简言之&#xff1a; 热点设置功能不可用&#xff0c;不可设置SSID和密码&#xff0c;不可程序控制开启关闭&#xff0c;网上的代码统统都过时了Loca…

图书管理系统源码,图书管理系统开发,图书借阅系统源码整体功能演示

用户登录 基础资料 操作员管理 超期罚金设置 读者分类 读者管理 图书分类 图书管理 图书借还管理 图书借取 图书还去 图书借还查询 读者借书排行 用户登录 运行View目录下Login文件夹下的Index.csthml出现登录界面&#xff0c;输入用户名密码分别是admin密码admin12…

网络安全小白自学

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

【数据结构】排序效率最优解之一:二叉树-堆

Hello everybody!今天打算给大家介绍一个功能比较强大的数据结构的基础&#xff0c;它不仅具有很高的应用价值而且排序效率很高。冒泡排序都知道叭&#xff0c;它的时间复杂度为O(n^2)&#xff0c;而堆排序的时间复杂度为O(n*logn)。堆排序直接碾压冒泡排序。在c语言阶段&#…

线性系统理论 -- 降阶观测器的设计

定理&#xff1a; 若系统能观测&#xff0c;且rankCm&#xff0c;则系统的状态观测器的最小维数是(n-m)。 线性定常时不变系统方程如下&#xff08;以三阶(n3)单入单出系统为例&#xff0c;有mrankC1&#xff09;&#xff1a; 取变换阵P&#xff0c;有&#xff1a; 对上述系统…

易宝OA系统ExecuteSqlForSingle接口SQL注入漏洞复现 [附POC]

文章目录 易宝OA系统ExecuteSqlForSingle接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 易宝OA系统ExecuteSqlForSingle接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章…

前端量子纠缠 效果炸裂 multipleWindow3dScene

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 ✈️已经旅游的地点 | 新疆-乌鲁木齐、新疆-吐鲁番、广东-广州…

免交互语法expect

目录 前瞻 相关命令 范例一&#xff1a;免密登录另外一台主机并创建用户 范例二&#xff1a;免密登录另外三台主机并创建用户 前瞻 expect是建立在tcl&#xff08;tool command language&#xff09;语言基础上的一个工具&#xff0c;常被用于进行自动化控制和测试&#xf…

HbuilderX 项目打包文件过大问题优化

文章目录 HbuilderX 项目打包文件过大问题优化主要操作收效甚微&#xff0c;但又有那么点用的方法使用 gulp 压缩&#xff08;最后一步&#xff09;使用与配置 网上找的 gulp 优化压缩配置还未尝试可能有用的方法 尝试过程中看到的一些优质文章 HbuilderX 项目打包文件过大问题…

ubuntu配置免密登录vscode

1、配置免密登录 &#xff08;1&#xff09;在windows系统cmd下运行命令 ssh-keygen 一路回车&#xff0c;将会在C:\Users\用户名\.ssh目录下生成两个文件&#xff1a;id_rsa和id_rsa.pub。如下图所示。 &#xff08;2&#xff09;进入.ssh目录。如果想使用root用户&#xff0…

ArrayList与顺序表的简单理解

前言----list 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下所示&#xff1a; Iterable也是一个接口&#xff0c;表示实现该接口的类是可以逐个元素进…

鸿蒙4.0开发笔记之ArkTS语法基础@Entry@Component自定义组件的使用(九)

文章目录 一、自定义组件概述1、什么是自定义组件2、自定义组件的优点 二、创建自定义组件1、自定义组件的结构2、自定义组件要点3、成员变量的创建4、参数传递规则 三、练习案例 一、自定义组件概述 1、什么是自定义组件 在ArkUI中&#xff0c;UI显示的内容均为组件&#xf…

443. 压缩字符串

这篇文章会收录到 : 算法通关村第十二关-黄金挑战字符串冲刺题-CSDN博客 压缩字符串 描述 : 给你一个字符数组 chars &#xff0c;请使用下述算法压缩&#xff1a; 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 &#xff1a; 如果这一组长度为 1 &#xff0c;…

c++ opencv使用drawKeypoints、line实现特征点的连线显示

前言 图像经过算子处理后得到若干特征点&#xff0c;使用opencv进行渲染显示出这些特征点并且连线&#xff0c;更直观的对比处理前后的一些差异性 demo核心代码 //画出特征点并连线 void drawFilterLinePoints(cv::Mat& srcMat, cv::Point2f pointStart, cv::Point2f po…

基于FactoryBean、实例工厂、静态工厂创建Spring中的复杂对象

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

LD_PRELOAD劫持

LD_PRELOAD劫持 <1> LD_PRELOAD简介 LD_PRELOAD 是linux下的一个环境变量。用于动态链接库的加载&#xff0c;在动态链接库的过程中他的优先级是最高的。类似于 .user.ini 中的 auto_prepend_file&#xff0c;那么我们就可以在自己定义的动态链接库中装入恶意函数。 也…

P9240 [蓝桥杯 2023 省 B] 冶炼金属(比值问题)

数学分析&#xff1a; 1. max(最大比值) A/B 余数p&#xff08;p<B&#xff09; > Amax*Bp 反证&#xff1a;若max不为最大,则设maxn为最大比值 (maxn)*Bmax*Bn*Bp1 > A (n*Bp1 > p ,矛盾) 故max为最大比值 2.min(最小比值…

随时随地,打开浏览器即可体验的在线PS编辑器

即时设计 即时设计是国产的专业级 UI 设计工具&#xff0c;不限平台不限系统&#xff0c;在浏览器打开即用&#xff0c;能够具备 Photoshop 的设计功能&#xff0c;钢笔、矢量编辑、矩形工具、布尔运算等设计工具一应俱全&#xff0c;是能够在线使用的 Photoshop 免费永久工具…

算法训练 第九周

二、删除排序链表中的重复元素 II 1.遍历 由于给定的链表是排好序的&#xff0c;因此重复的元素在链表中出现的位置是连续的&#xff0c;因此我们只需要对链表进行一次遍历&#xff0c;就可以删除重复的元素。由于链表的头节点可能会被删除&#xff0c;因此我们需要额外设定一…

BGP综合实验(IP)

实验要求&#xff1a; 实验思路&#xff1a; 1.划分IP地址&#xff1a; 将172.16.0.0/16的网段划分为172.16.0.0/24的多个网段&#xff0c;因为在实际工程当中&#xff0c;24的网段更符合用户网段&#xff0c;因此先将网段划分为172.16.0.0 /24的多个子网掩码为24的网段&…