Golang 字符串的常见操作


Posted in Golang onApril 19, 2022

1. 字节数组

字节与字符的区别

  • 字节(Byte) 是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位
  • 字符(Character) 是计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等
  • 一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示
  • 通俗点来说,人的语言就是字符,而字节是机器的语言

示例

package main

import "fmt"

func main() {
	var (
		str1 = "hello"
		str2 = "world"
	)
	str3 := str1 + " " + str2

	//字符串转换成字节数组
	tmp := []byte(str3)
	fmt.Printf("数据: %s,长度: %d,数据类型: %T\n", str3, len(str3), str3)
	fmt.Println("字节数组:", tmp)
	fmt.Printf("数据: %s,长度: %d,数据类型: %T\n", tmp, len(tmp), tmp)

	//字节数组转字符串
	fmt.Println("字节数组转字符串:", string(tmp))

	//反转函数调用
	fmt.Println("反转: ", Reverse(str3))
}

//反转函数
func Reverse(str string) string {
	var (
		result string
		leng   int = len(str)
	)
	for i := 0; i < leng; i++ {
		//sprintf转换数据类型为string,使用+进行拼接
		result = result + fmt.Sprintf("%c", str[leng-i-1])
	}
	return result
}

输出结果如下

数据: hello world,长度: 11,数据类型: string
字节数组: [104 101 108 108 111 32 119 111 114 108 100]
数据: hello world,长度: 11,数据类型: []uint8
字节数组转字符串: hello world
反转:  dlrow olleh

Sprintf的作用

package main

import "fmt"

func main() {
	var a = 88
	fmt.Printf("a的数值: %d , 类型: %T\n", a, a)
	b := fmt.Sprintf("%d", a)
	fmt.Printf("b的数值: %s , 类型: %T\n", b, b)
}

输出结果如下

a的数值: 88 , 类型: int
b的数值: 88 , 类型: string

2. 头尾处理

prefix()函数判断前缀

suffix()函数判断后缀

使用prefix函数判断URL是否是以http://为开头,如果不是,则加上http://使用suffix函数判断路径是否以/结尾,如果不是,则加上/为结尾

package main

import (
	"fmt"
	"strings"
)

func main() {
	var (
		url  string
		path string
	)

	fmt.Println("请输入URL和路径:")
	fmt.Scanf("%s%s", &url, &path)
	fmt.Printf("URL: %s\n", urlProcess(url))
	fmt.Printf("路径: %s", pathProcess(path))

}

//字符串头部处理
func urlProcess(url string) string {
	//判断是否以http://开头,返回布尔类型赋予result
	result := strings.HasPrefix(url, "http://")
	if !result {
		url = fmt.Sprintf("http://%s", url)
	}
	return url
}

//字符串尾部处理
func pathProcess(path string) string {
	//判断是否以/结尾,返回布尔类型赋予result
	result := strings.HasSuffix(path, "/")
	if !result {
		path = fmt.Sprintf("%s/", path)
	}
	return path
}

终端输入如下:

PS D:\goproject\src\test\main> go run .\main.go
请输入URL和路径:
www.google.com /opt/conf/k8s
URL: http://www.google.com
路径: /opt/conf/k8s/

3. 位置索引

Index()函数判断出现在前面的位置

LastIndex()函数判断出现在末尾的位置

判断子字符串在字符串中首次出现的位置和在末尾出现的位置

package main

import (
	"fmt"
	"strings"
)

func main() {
	var (
		a   = "abbaabcddccd"
		str = "cd"
	)

	//判断str在a中首次出现的位置
	head := strings.Index(a, str)
	tail := strings.LastIndex(a, str)
	fmt.Printf("首次出现的位置:%d\n最后出现的位置:%d\n", head, tail)
}

输出结果如下

首次出现的位置:6
最后出现的位置:10

4. 替换

Replace()函数格式如下:

Replace(原字符串,原字段,新字符串,新字段,替换次数) -1表示全部替换,0表示不替换

package main

import (
	"fmt"
	"strings"
)

func main() {
	var (
		a = "abbaabcddccd"
	)
	//把cd替换成CD,-1表示全部替换,0表示不替换
	result := strings.Replace(a, "cd", "CD", -1)
	fmt.Printf("替换前: %v\n", a)
	fmt.Printf("全部替换后: %v\n", result)
	result1 := strings.Replace(a, "cd", "CD", 0)
	fmt.Printf("不进行替换: %v\n", result1)
}

输出结果如下

替换前: abbaabcddccd
全部替换后: abbaabCDdcCD
不进行替换: abbaabcddccd

5. 统计次数

Count()函数统计次数

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = "abbcddcedsca"

	count := strings.Count(a, "cd")
	fmt.Printf("count: %v\n", count)
}

输出结果如下

count: 1

6. 重复

Repeat()函数重复输出多次

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = "加油~"

	result := strings.Repeat(a, 3)
	fmt.Printf("result: %v\n", result)
}

输出结果如下

result: 加油~加油~加油~

7. 大小写

ToUpper()函数转换大写

ToLower()函数转换小写

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = "hello"
	//转换大写
	result1 := strings.ToUpper(a)
	fmt.Printf("大写: %v\n", result1)

	//把上面转换的大写给转成小写
	result2 := strings.ToLower(result1)
	fmt.Printf("小写: %v\n", result2)

}

输出结果如下

大写: HELLO
小写: hello

8. 去除字符

TrimSpace()函数去除空白字符

TrimLeft()从左往右删除

TrimRight()从右往左删除

去除首尾空白字符

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = " abc "

	fmt.Println("长度:", len(a))
	//去除首位空白的字符
	result1 := strings.TrimSpace(a)
	fmt.Println("去除首尾空白字符:", result1, "\n长度:", len(result1))
}

输出结果如下

长度: 5
去除首尾空白字符: abc 
长度: 3

去除指定位置字符

package main

import (
	"fmt"
	"strings"
)

func main() {
	var a = "this is test web"

	//去掉字符串首尾部web字符
	result1 := strings.Trim(a, "web")
	fmt.Println("尾部去除:", result1)

	//从左往右删除所有指定的字符,直到遇到不包含在指定的字符为止
	result2 := strings.TrimLeft(a, "this")
	//空格也需匹配删除,直到没有指定的字符可以匹配为止
	result3 := strings.TrimLeft(a, "this ")
	//从右往左删除所有指定的字符,直到遇到不包含在内的字符为止
	result4 := strings.TrimRight(a, "web")

	fmt.Println("从左往右删除:", result2)
	fmt.Println("从左往右删除,有空格:", result3)
	fmt.Println("从右往左删除:", result4)
}

输出结果如下

尾部去除: this is test 
从左往右删除:  is test web
从左往右删除,有空格: est web
从右往左删除: this is test 

9. 字符串切片处理

Fields()函数

Split()函数

默认识别空格进行切片处理

package main

import (
	"fmt"
	"strings"
)

func main() {
	var str string = "abc def ghi"
	//Fields函数默认识别的符号是空格
	result1 := strings.Fields(str)
	fmt.Printf("数据类型: %T , 数据格式: %v\n", result1, result1)
	for i := 0; i < len(result1); i++ {
		fmt.Println(result1[i])
	}
}

输出结果如下

数据类型: []string , 数据格式: [abc def ghi]
abc
def
ghi

识别其他符号分隔成切片

package main

import (
	"fmt"
	"strings"
)

func main() {
	var str string = "abc,def,ghi"
	//识别逗号进行分隔切片
	result := strings.Split(str, ",")
	fmt.Printf("数据类型: %T , 数据格式: %v\n", result, result)
}

输出结果如下

数据类型: []string , 数据格式: [abc def ghi]

推荐使用Split()函数进行分隔

因为fields()函数默认只能识别空格,不能识别其他符号,而Split()函数则均可以识别

把切片按指定分隔符进行转换成字符串

Join()函数

package main

import (
	"fmt"
	"strings"
)

func main() {
	//定义切片
	var slice = []string{"123", "456", "789"}
	fmt.Printf("切片: %v\n", slice)

	//切片转换成字符串
	result := strings.Join(slice, ":")
	fmt.Printf("数据结构: %v , 数据类型: %T", result, result)
}

输出结果如下

切片: [123 456 789]
数据结构: 123:456:789 , 数据类型: string

10. 数值处理

使用strconv.Itoa()函数将数值转换成字符串

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var num int = 12345678
	fmt.Printf("初始数据类型: %T\n", num)
	fmt.Printf("初始值: %d\n", num)

	//转换成字符串
	result := strconv.Itoa(num)
	fmt.Printf("转换后数据类型: %T\n", result)
	fmt.Printf("转换后值为: %s", result)
}

输出结果如下

初始数据类型: int
初始值: 12345678
转换后数据类型: string
转换后值为: 12345678

使用Sprintf()函数将整数转换成字符串

package main

import (
	"fmt"
)

func main() {
	var num int = 12345678
	fmt.Printf("初始数据类型: %T\n", num)

	//使用Sprintf()转换成字符串,可以实现多类型的转换
	result := fmt.Sprintf("%d", num)
	fmt.Printf("转换后数据类型:%T\n", result)
}

输出结果如下

初始数据类型: int
转换后数据类型:string

使用strconv.Atoi()函数进行字符串转换整数

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var str string = "12345678"

	//字符串转整数
	result, err := strconv.Atoi(str)
	//如果有转换过程中有错,就抛出错误,没有错就返回数据类型
	if err == nil {
		fmt.Printf("数据类型: %T\n", result)
	} else {
		fmt.Println(err)
	}
}

输出结果

数据类型: int 

Golang 字符串的常见操作

到此这篇关于Go语言字符串常见操作的使用汇总的文章就介绍到这了!

Golang 相关文章推荐
go结构体嵌套的切片数组操作
Apr 28 Golang
golang slice元素去重操作
Apr 30 Golang
go语言中GOPATH GOROOT的作用和设置方式
May 05 Golang
Go 自定义package包设置与导入操作
May 06 Golang
Go 在 MongoDB 中常用查询与修改的操作
May 07 Golang
go xorm框架的使用
May 22 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
golang 语言中错误处理机制
Aug 30 Golang
golang实现一个简单的websocket聊天室功能
Oct 05 Golang
Golang流模式之grpc的四种数据流
Apr 13 Golang
golang使用map实现去除重复数组
Apr 14 Golang
Go语言编译原理之变量捕获
Aug 05 Golang
Golang 链表的学习和使用
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 #Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 #Golang
GO语言字符串处理函数之处理Strings包
Apr 14 #Golang
golang的文件创建及读写操作
Apr 14 #Golang
golang定时器
Apr 14 #Golang
golang用type-switch判断interface的实际存储类型
Apr 14 #Golang
You might like
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
快速排序 php与javascript的不同之处
2011/02/22 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
Python Queue模块详解
2014/11/30 Python
Python中获取对象信息的方法
2015/04/27 Python
深入理解Python变量与常量
2016/06/02 Python
python求质数的3种方法
2018/09/28 Python
python zip()函数使用方法解析
2019/10/31 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python自动下载图片的方法示例
2020/03/25 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
美国五金商店:Ace Hardware
2018/03/27 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
公务员总结性个人自我评价
2013/12/05 职场文书
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
中队活动总结
2014/08/27 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
卖房协议书样本
2014/10/30 职场文书
车间安全生产管理制度
2015/08/06 职场文书
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏