iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go字符串操作深入解析
  • 719
分享到

Go字符串操作深入解析

Go字符串操作Go 字符串 2023-02-01 09:02:33 719人浏览 安东尼
摘要

目录重要性反转字符串拆分与合并字符串忽略大小写判等蛇行命名转驼峰命名方式替换和查找其他速查其他重要性 字符串处理基本功,无论面试算法还是工作都经常使用到。以下我们以一个算法+一个实

重要性

字符串处理基本功,无论面试算法还是工作都经常使用到。以下我们以一个算法+一个实际工作场景的形式来阐述字符串处理。

以下算法都来自leecode中国

反转字符串

先来做下原题 344题反转字符串

原题目要求不允许额外空间原地反转。

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

直接一个循环反转了。

func reverseString(s []byte)  {
    //双指针,一个放头一个放尾
    i:=0 
    j:=len(s)-1
    //反转这两个位置的元素
    for i<j {
        s[i],s[j]=s[j],s[i]
        i++
        j--
    }
    
}

如果是python直接一个revert就出来了,Go得自己写确实麻烦。

拆分与合并字符串

题目直接传入就是字节数组,外部怎么处理呢?就是字符串和byte的来回转换。

s := []byte(str)
reverseString(s)
fmt.Println(string(s))

这样会把字符串变成一个个字节,想象一个场景你的文章有多个标签,全部塞到一个字段里。要拆分显示怎么操作?

# 拆分
strList := strings.Split("Go语言,channel,并发", ",")
fmt.Println(strList)
# 合并
str := strings.Join(strList,",")
fmt.Println(str)
  • strings 是一个包,封装了很多字符串处理的函数。
  • strings.Split 拆分,参数一是字符串,参数二是分割符
  • strings.Join 合并,参数一是字符串数组,参数二是合并用的分割符

忽略大小写判等

一个验证码的场景,例如验证码是2s5G 用户输入2s5g实际上也是对的。

全部转大写,或者全部转小写判等就行。我写粗糙一点,看不懂留言啊。

strings.ToLower("2s5G") == "2s5g"
strings.ToUpper("2s5G") == "2S5G"

当然strings直接就提供了不区分大小写判断是否相等的办法。

fmt.Println(strings.EqualFold("abc", "ABC"))

蛇行命名转驼峰命名方式

涉及知识点:拆分、大小写转换、组合

func main() {
	name := "ab_cde_as"
	strList := strings.Split(name,"_")
	for index,str := range strList{
		strList[index] = strings.ToUpper(string(str[0])) + str[1:]
	}
	name = strings.Join(strList,"")
	fmt.Println(name)
}
  • 输出 AbCdeAs
  • str[0] 取其中一个字符,str[1:]切片取字符串,得到[1,len(str)]位置闭区间的字符串。

当前可以直接用strings.Title("hello")来得到Hello

替换和查找

替换和查找也是比较高频的操作。常见于配置替换,不过基本都用sed命令搞定了。

strings.Replace("ip:10.1.1.1", "10.1.1.1", "0.0.0.0", -1)

最后一个是次数,-1代表全部替换,如果只替换一次就是1

当前正常情况下不会那么蠢啦,都是用正则匹配的,比如我之前有个需求把所有的图片网址取出来,存到我的对象存储里面,再插入回去,我就写了一个程序。

我写个简单版的。测试一下正则是否匹配,输出ok

regexStr := "https*://[^\\s]*(jpg|png)"
	if ok, _ := regexp.MatchString(regexStr, "/file/imgs/upload/202302/01/maih4ura2c1.jpg"); ok {
		fmt.Println("ok")
	}

开始搞

data := `
![](/file/imgs/upload/202302/01/bqo4yd2pcco.jpg)
[](Https://coding3min.com/abc.html)
![](/file/imgs/upload/202302/01/l20dorlo5ju.jpg)
https://coding3min.com
`
	re, _ := regexp.Compile(regexStr)
	picList := re.FindAllString(data,-1)
	sort.Strings(picList)
	for k,v:=range picList{
		if k!=0 && picList[k]==picList[k-1]{
			continue
		}
		//省略改变图片链接
		afterStr := "xxx"
		re,_ = regexp.Compile(v)
		data = re.ReplaceAllString(data,afterStr)
	}
	fmt.Println(data)
  • regexp.Compile(regexStr) 加载正则表达式
  • re.FindAllString(data,-1) 查找所有匹配的结果,参数二代表查找几个,-1就是全部。返回一个list
  • re.ReplaceAllString(data,afterStr) 替换全部原字符串中所有匹配的,为新字符串(参数二),返回替换完后的结果。
  • 至于倒数第四行为什么要再加载,是因为需要把当前图片当正则去匹配所有此图片内容。
  • 至于为什么要排序,是为了去重,跳过重复匹配的部分。

其他速查

判断大小 1 前大 0 一样 -1 后大

strings.Compare("a", "b")

子串包含

fmt.Println(strings.Contains("hello", "he"))

返回子串出现的次数

fmt.Println(strings.Count("happy", "p")) 

判断字符串是否以某子串开头、结尾

fmt.Println(strings.HasPrefix("hello", "he"))
fmt.Println(strings.HasSuffix("hello", "lo"))

返回字符串第一次出现的位置 不存在返回-1

fmt.Println(strings.Index("abandon already", "a")) 

返回字符串最后一次出现的位置 不存在返回-1

fmt.Println(strings.LastIndex("abandon already", "a"))

其他

处理中文汉字使用utf8包,就不展开说啦。

以上就是Go字符串操作深入解析的详细内容,更多关于Go字符串操作的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Go字符串操作深入解析

本文链接: https://www.lsjlt.com/news/193784.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go字符串操作深入解析
    目录重要性反转字符串拆分与合并字符串忽略大小写判等蛇行命名转驼峰命名方式替换和查找其他速查其他重要性 字符串处理基本功,无论面试算法还是工作都经常使用到。以下我们以一个算法+一个实...
    99+
    2023-02-01
    Go字符串操作 Go 字符串
  • 深入解析Go 变量字符串与字符编码问题
    目录字符串Unicode UTF8常⽤字符串函数字符串就是一串固定长度的字符连接起来的字符序列(很多字符拼接在一起的)。 Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使...
    99+
    2022-11-13
  • 深入理解 Go 中的字符串
    目录字符串的本质字符串的底层原理字符串的本质 在编程语言中,字符串发挥着重要的角色。字符串背后的数据结构一般有两种类型: 一种在编译时指定长度,不能修改一种具有动态的长度,可以...
    99+
    2022-06-07
    GO 字符串 字符
  • Python入门之字符串操作详解
    目录字符串字符串常用操作拼接字符串字符串复制计算字符串的长度截取字符串和获取单个字符字符串包含判断常用字符串方法把字符串的第一个字符大写统计字符串出现的次数检查字符串开头检查字符串结...
    99+
    2022-11-11
  • 深入解读python字符串函数
    目录字符串id() 函数作用取地址字符串的获取索引关系切片step总结字符串 python中有一个单独的地址是字符串保留区 s1=s2表示 将s2的地址给了s1 id() 函数作用...
    99+
    2022-11-12
  • python字符串操作详析
    目录一、5种字符串检索方法二、join字符串拼接方法 [列表/元组 --> 字符串]三、3种字符串分割方法 [字符串 --> 列表/元组]四、5种大小写转换方法五、3种字...
    99+
    2022-11-13
  • 深入解析字符集和字符编码
    ...
    99+
    2022-10-18
  • Redis字符串原理的深入理解
    前言 来掘进都有两年多了一直当个小透明,今天终于发一次文章了. 最近在看 Redis,感觉收获很多,写篇博客记录一下. Redis 有五种基础数据结构:string,list,set,zset,has...
    99+
    2022-10-18
  • go 字符串修改的操作代码
    字符串和切片(string and slice) string底层就是一个byte的数组,因此,也可以进行切片操作。 package main import ("fmt") func...
    99+
    2022-11-13
  • shell字符串操作详解
    1、shell变量声明的判断 表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ...
    99+
    2022-06-04
    字符串 详解 操作
  • PHP字符串操作入门指南
    PHP是一门广泛应用于开发Web应用程序的编程语言。在Web应用程序中,字符串操作是一个非常重要的部分,因为许多任务需要处理和操作大量的文本数据。本文将介绍PHP中的字符串操作,包括字符串函数、字符串变量、字符串连接、截取、替换、搜索和格式...
    99+
    2023-05-20
    PHP 字符串操作 入门指南
  • 深入讲解Python编程中的字符串
    Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表: Python字符串运算符 下表实例变量a值为字符串"Hello",b变量值为"Python": Pyth...
    99+
    2022-06-04
    字符串 Python
  • Go各时间字符串使用解析
    Go 中时间格式化的模板 const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2...
    99+
    2022-06-07
    GO 字符串 字符
  • .NET中怎么实现字符串解析操作
    本篇文章为大家展示了.NET中怎么实现字符串解析操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先是“token”,token是最小的信息单元,我们可以把它当作是一个字符串来处理。而多个toke...
    99+
    2023-06-17
  • 深入了解C语言字符函数和字符串函数
    目录前言求字符串长度strlen介绍strlen直接使用:strlen模拟实现:strlen对比sizeof长度不受限制的字符串函数strcpy直接使用模拟实现:strcat直接使用...
    99+
    2022-11-12
  • Java深入讲解static操作符
    目录前言static修饰成员变量静态成员变量的特性static修饰的成员方法静态方法特性前言 这篇文章主要是从类中static修饰的成员变量,static修饰的成员方法这两个方面来讲...
    99+
    2022-11-13
  • 深度解密Go语言中字符串的使用
    目录Go 字符串实现原理字符串的截取字符串和切片的转换字符串和切片共享底层数组什么是万能指针字符串和其它数据结构的转化整数和字符串相互转换Parse 系列函数Format 系列函数小...
    99+
    2022-11-11
  • GO语言字符串常用操作小结
    目录字符串简介常用方法中文字符串截取反转字符串字符串大小写操作去除字符串首位空格合并字符串分割字符串字符串简介 字符串是一段固定长度字符连接起来的字符序列,GO语言中的字符串是由单个...
    99+
    2023-02-09
    GO 字符串常用操作 GO 字符串操作
  • 深入理解JavaScript中的Base64编码字符串
    目录初步认识Base64是怎么诞生的基础定义编码方式体积增大= 等号非ASCII码字符编解码方法btoa 和 atob第三方库前端常见应用小图片转码文件读取Canvas生成图片其他总...
    99+
    2023-02-21
    JavaScript Base64编码字符串 JavaScript Base64编码 JavaScript Base64
  • PHP入门学习之字符串操作
    目录字符串简介单引号和双引号的区别字符串的连接符去除字符串首尾空格和特殊字符1.trim()函数2.Itrim()函数3.rtrim()函数转义、还原字...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作