6、golang字符串之字符串拼接,转义字符,字符串切片,字符串常用函数

目录

golang字符串:

golang字面量:

总结如下:

golang字符串拼接:

使用加号:

使用格式化输出拼接( Sprintf ):

strings.Join()

buffer.WriteString()

golang转义字符:

golang字符串切片:

golang字符串常用函数:


golang字符串:

golang语言字符串是一个任意字节的常量序列;

golang字面量:

在Go语言中,字符串字面量使用双引号("")或者反引号(``)来创建。

  • 总结如下:
字面量符号特点
""用于创建可解析的字符串,支持转义,但不能用来引用多行字符串(应用较为广泛)
``用于创建原生的字符串字面量,可以由多行组成,但不支持转义,并且可以包含除了反引号外其他所有字符(多用于书写多行消息,HTML以及正则表达式)

实例如下:

package main

import "fmt"

func main() {
	x := "happy new year to all everyone" // 双引号("")
	y := `we are brother,	
so,
i hope you can have a happy year` //反引号(``)
	fmt.Printf("x: %v\n", x)
	fmt.Printf("y: %v\n", y)
}
/* by: csdn 陽i */

执行结果:

[Running] go run "d:\Go\test_3\test.go"
x: happy new year to all everyone
y: we are brother,	
so,
i hope you can have a happy year

[Done] exited with code=0 in 1.722 seconds
/* by: csdn 陽i */
golang字符串拼接:
使用加号:

虽然golang语言中的字符串是不可变的,但是字符串支持+级联操作及+=追加操作;示例如下:

package main

import "fmt"

func main() {
	name := " CSDN 陽i "
	sex := "boy"
	email := "x666888x@foxmail.com"
	// 使用+符号,对字符进行拼接
	msg := name + "," + sex + "," + email
	fmt.Printf("msg: %v\n", msg)
	// 使用+=符号,对字符串追加操作
	info := " CSDN 陽i ,"
	info += "boy ,"
	info += "x666888x@foxmail.com"
	fmt.Printf("info: %v\n", info)
}

/* by: csdn 陽i */

执行结果:

[Running] go run "d:\Go\test_3\tempCodeRunnerFile.go"
msg:  CSDN 陽i ,boy,x666888x@foxmail.com
info:  CSDN 陽i ,boy ,x666888x@foxmail.com

[Done] exited with code=0 in 1.646 seconds
/* by: csdn 陽i */
使用格式化输出拼接( Sprintf ):

通过 Sprintf 格式化输出,同样可实现字符拼接效果,示例如下:

package main

import "fmt"

func main() {
	name := " CSDN 陽i "
	sex := "boy"
	email := "x666888x@foxmail.com"
	info := fmt.Sprintf("%s,%s,%s", name, sex, email)
	fmt.Printf("info: %v\n", info)
}
/* by: csdn 陽i */

执行结果:

[Running] go run "d:\Go\test_3\test.go"
info:  CSDN 陽i ,boy,x666888x@foxmail.com

[Done] exited with code=0 in 1.592 seconds
/* by: csdn 陽i */
strings.Join()

当然,通过 strings.Join() 同样可以实现字符拼接,join会根据字符串数组的内容,计算出一个拼接之后的长度,然后申请对应大小的内存,一个一个字符串填入,在已有一个数据的情况下,这种效率会很高;但是本来没有,去构造一个数组数据的代价也不小;示例如下:

package main

import (
	"fmt"
	"strings"
)

func main() {
	name := " CSDN 陽i "
	sex := "boy"
	email := "x666888x@foxmail.com"
	info := strings.Join([]string{name, sex, email}, ",")
	fmt.Printf("info: %v\n", info)
}
/* by: csdn 陽i */

执行结果:

[Running] go run "d:\Go\test_3\test.go"
info:  CSDN 陽i ,boy,x666888x@foxmail.com

[Done] exited with code=0 in 1.525 seconds
/* by: csdn 陽i */
buffer.WriteString()

 buffer.WriteString() 相对较为理想,可以当作可变符使用,对内存的增长也有优化,如果能够预估字符串的长度,还可以使用 buffer.Grow() 接口设置 capacity .

package main

import (
	"bytes"
	"fmt"
)

func main() {
	var buffer bytes.Buffer
	buffer.WriteString(" CSDN 陽i ")
	buffer.WriteString("boy")
	buffer.WriteString("x666888x@foxmail.com")
	fmt.Printf(" %v\n", buffer.String())
}
/* name := " CSDN 陽i " */

执行结果:

[Running] go run "d:\Go\test_3\test.go"
  CSDN 陽i boyx666888x@foxmail.com

[Done] exited with code=0 in 2.145 seconds
/* name := " CSDN 陽i " */
golang转义字符:

golang的字符串常见转义符包括回车,换行,单双引号,制表符,如下表所示:

转义符含义
\r回车符(返回行首)
\n换行符(直接跳到下一行的同列位置)
\t制表符(等同于键盘的tab按键)
\‘单引号
\"双引号
\\反斜杠

示例如下:

package main

import "fmt"

func main() {
	//回车符
	golang := "hello \r world"
	fmt.Printf("golang: %v\n", golang)
	//换行符
	boke := "https://blog.csdn.net/weixin_47429395?spm=1000.2115.3001.5343\n陽i"
	fmt.Printf("boke: %v\n", boke)
	//制表符
	study := "陽i\tenjoy study golang"
	fmt.Printf("study: %v\n", study)
	//双引号,反斜杠
	godir := "my golang dir is: \"D:\\Program Files\\Go\\go1.21.4\""
	fmt.Printf("my golang dir is: %v\n", godir)
}
/* name := " CSDN 陽i " */

执行结果:

[Running] go run "d:\Go\test_3\test.go"
golang: hello 
 world
boke: https://blog.csdn.net/weixin_47429395?spm=1000.2115.3001.5343
陽i
study: 陽i	enjoy study golang
my golang dir is: my golang dir is: "D:\Program Files\Go\go1.21.4"

[Done] exited with code=0 in 1.644 seconds
/* name := " CSDN 陽i " */
golang字符串切片:

运行实例(及相关注释):

package main

import (
	"fmt"
)

func main() {
	name := "csdn--陽i"
	a := 0
	b := 5
	fmt.Printf("name[a]: %c\n", name[a])	//获取字符串索引位置为a的原始字节
	fmt.Printf("name[a:b]: %v\n", name[a:b])	//截取字符串索引位置为a到b-1的字符串
	fmt.Printf("name[a:]: %v\n", name[a:])	//截取字符串索引位置为a到len(name)-1的字符串
	fmt.Printf("name[:b]: %v\n", name[:b])	//截取字符串索引位置为0到b-1的字符串
}
/* name := " CSDN 陽i " */

运行结果:

[Running] go run "d:\Go\test_3\test.go"
name[a]: c
name[a:b]: csdn-
name[a:]: csdn--陽i
name[:b]: csdn-

[Done] exited with code=0 in 1.691 seconds
/* name := " CSDN 陽i " */
golang字符串常用函数:
方法介绍
len(str)求长度
+或fmt.Sprintf拼接字符串
strings.Split分割
strings.contains判断是否包含
strings.HasPrefix ; strings.HasSuffix前缀/后缀判断
strings.index() ; strings.Lastindex()字符串出现的位置
strings.Join(a[]string,sep string)join操作

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陽i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值