【Go】字符串相关知识点
字符串(String)是 Go 语言中最常用的数据类型之一,广泛应用于文本处理、数据解析、网络通信等场景。Go 语言的字符串是不可变的 UTF-8 字节序列,在性能和安全性方面与其他编程语言有所不同。
源代码
package main//字符类型 byte rune//编码 人类语言---机器语言 映射
//ascii -- 英文字符
//unicode -- 万国码 utf8 gbk 是unicode具体实现,实现存入磁盘,它们都有不同的标志位来区分//byte -- uint8 英文字符使用byte
//runne -- uint32 中文等其它字符使用runne//字符串类型 string 双引号包裹
//如果在go里面使用字符串,一定要使用双引号!import ("fmt""strconv""strings""unicode/utf8"
)func main() {string_1()string_2()
}func string_1() {var c1 bytec1 = 97fmt.Println(c1, "\nsrting 将字符类型转换成文字显示:", string(c1)) //var c2 = '中' //单引号得到的是字节码,不能用单引号引起多个字符fmt.Println("单引号输出中的字节码编码是:", c2) //这里输出的就是中的字节码,而不是 字符fmt.Printf("%T\n", c2)//如下情况会报错《more than one character in rune literal》//var c3 = '中国'//双引号原样输出var str1 stringstr1 = "中" //双引号包裹字符串fmt.Println("双引号输出字符,而不是字符码:", str1)var str2 stringstr2 = "中国"fmt.Println(str2)//统计字符串的长度 -- len(s1 srting类型) -- utf8.RuneCountInString(s1 srting类型)var str3 stringvar str4 stringstr3 = "abc萝卜子"//len 统计字节数,不是字符数fmt.Println("str3=abc萝卜子,占用的字节数是(中文占用3字节):", len(str3))str4 = "...中国china"//utf8.RuneCountInString(s1 srting类型) 统计字符串的长度 --> 统计unicode码的个数count := utf8.RuneCountInString(str4)fmt.Println("str4=...中国china,的字符个数是:", count)//转义字符 -- 含有特殊含义的字符// \t制表符 \n换行符 \" 特殊符号本身fmt.Println("--------------------\n\n\n转义字符:")var str5 stringvar str6 stringstr5 = "hello\n\"\t\\world"//反引号包裹的字符串——> 原样输出str6 = `反引号包裹的字符串——> 原样输出: hello \n\t\\\" world`fmt.Println(str5)fmt.Println(str6)//字符串的截取 [start:end] 按字节截取fmt.Println("--------------------\n\n\n")fmt.Println("字符串的截取 [start:end] 按字节截取")var str7 stringvar str8 stringstr7 = "hello world!"str8 = "你好世界" //反引号/*hello wor l d123456789 10 11[) 左闭右开区间*/fmt.Println(str7[0:4])fmt.Println("省略开始:", str7[:4])fmt.Println("省略结束:", str7[4:])fmt.Println("中文不太支持截取操作(按字节截取,中文3字节):", str8[0:8])//字符串和其它数据的转换 -- strconv 库//将整形转成字符串num1 := 200str9 := strconv.Itoa(num1)fmt.Printf("将整形转成字符串: \nstr9 is %s,type is %T\n", str9, str9)//字符串转换成整形str10 := "100" //必须要数字的字符串才能转换,abc不能转成整形!num2, e := strconv.Atoi(str10) //返回两个值 不能转换e就会拿到错误信息if e != nil { //nil 为空表示 没有错误信息fmt.Println(e)} else {fmt.Printf("字符串转成整形: \nstr9 is %d,type is %T\n", num2, num2)}/*% -- %s 字符串%c 转换成字符的形式显示 类似与string()%d 十进制%x 十六进制%% %号本身%T 输出类型%.2f保留两位小数%v 输出具体值*/fmt.Println("--------------------\n")//将格式化好的字符串赋值给另一个变量str11 := fmt.Sprintf("my name is %s,age is %d", "luobozi", 21)fmt.Println("格式化赋值:", str11)fmt.Println("--------------------\n")//字符串的遍历fmt.Println("字符串的遍历")str12 := "abcdefg"str13 := "hello,萝卜子"//按照字节遍历fmt.Println("按照字节遍历")for i := 0; i < len(str12); i++ {fmt.Printf("%v(%c) type: %T \n", str12[i], str12[i], str12[i])}//按照字符个数遍历fmt.Println("\n按照字符个数遍历")for _, i := range str13 { //连个值,一个下标,一个具体值,这里下标使用匿名函数接受,因为使用不到fmt.Println(i, string(i))}}func string_2() {//接收用户从键盘输入的任意字符串,统计其中英文字母、数字、其他字符的个数//统计输入的字符串中,出现的最多的字符和个数,最少字符和个数//var input string//fmt.Println("请输入一串字符:")//fmt.Scanln(&input)//fmt.Println(input)//max := 0//max_char := ""//min := utf8.RuneCountInString(input) + 1//min_char := ""//for _, str_num := range input {// count := 0// for _, str_num_2 := range input {// if str_num_2 == str_num {// count += 1// }// }// if count > max {// max = count// max_char = string(str_num)// }// if count < min {// min = count// min_char = string(str_num)// }//}//fmt.Println(max, max_char)//fmt.Println(min, min_char)fmt.Println("--------------------\n")//字符串的常用方法 -- strings 包//字符串的查找和替换 Contains(s1,s2 string类型) 返回bool 判断字符串s1中是不是包含s2//统计字符出现的次数Count(s1, s2 string类型) 计算s1中出现s2的次数//Idenx(s1,s2 string类型) 返回s2在s1中第一次出现的位置,若不存在就返回-1//Replace(s1,old,new string类型,int 类型) 将s1中前n个old子串替换成new n为-1 表示全部替换//Split(s1,sep string类型)根据sep将s1分割成几个部分 返回的是一个数组//Tolower(s1 string类型)将s1转换成小写//ToUpper(s1 string类型)将s1转换成大写 用在大小写不敏感的场景中//Trim(s1,s2 string类型) 将s1两侧的s2字符去除//HasPrefix(s1,s2 string类型) 判断s1是不是以s2开头//HasSuffix(s1,s2 string类型) 判断s1是不是以s2结尾fmt.Println("字符串的常用方法 -- strings 包")//字符串的常用方法 -- strings 包//字符串的查找和替换 Contains(s1,s2 string类型) 返回bool 判断字符串s1中是不是包含s2str_2 := "abcdeffsadfasdf"if strings.Contains(str_2, "ab") { //判断子串字符(substr)是否在字符串中fmt.Println("条件成立,子串在str_2中")}//统计字符出现的次数Count(s1, s2 string类型) 计算s1中出现s2的次数fmt.Println("a在str_2中出现的次数:", strings.Count(str_2, "a"))//Idenx(s1,s2 string类型) 返回s2在s1中第一次出现的位置,若不存在就返回-1en_str_2 := "1234567"fmt.Println("子串 1 出现在en_str_2下标:", strings.Index(en_str_2, "1"))fmt.Println("子串 4 出现在en_str_2下标:", strings.Index(en_str_2, "4"))//Replace(s1,old,new string类型,int 类型) 将s1中前n个old子串替换成new n为-1 表示全部替换en_str_3 := "hello,world,luobozi,world"fmt.Println("替换匹配到的第一个:", strings.Replace(en_str_3, "world", "HuNanChangSha", 1))fmt.Println("替换全部匹配成功的字符串:", strings.Replace(en_str_3, "world", "HuNanChangSha", -1))//Split(s1,sep string类型)根据sep将s1分割成几个部分 返回的是一个数组en_str_4 := "hello/world/HuNan/ChangSha/luobozi/"fmt.Println("en_str_4通过 / 符号分割后返回一个数组:", strings.Split(en_str_4, "/"))//ToLower(s1 string类型)将s1转换成小写//ToUpper(s1 string类型)将s1转换成大写 用在大小写不敏感的场景中en_str_5 := "HELLO WORLD HUNAN CHANGSHA LUOBOZI"en_str_6 := "from changsha hunan china"fmt.Println("将en_str_5转换成小写:", strings.ToLower(en_str_5))fmt.Println("将en_str_6转换成大写:", strings.ToUpper(en_str_6))//写一个大小写转换的代码en_str_1 := "START|asdfljklFASDASDFasdfiaASDF123aszASDQWEQ|end"resp := ""for _, v := range en_str_1 {if v >= 97 && v <= 122 {resp += string(v - 32)} else if v >= 65 && v <= 90 {resp += string(v + 32)} else {resp += string(v)}}fmt.Println("en_str_1字母大小写转换后:", resp)//Trim(s1,s2 string类型) 将s1两侧的s2字符去除 常用方式:清洗首尾的空格、清洗首尾的特殊符号en_str_7 := "**这是md加粗语法**"fmt.Println("将en_str_7的前后的 * 号清洗掉:", strings.Trim(en_str_7, "*"))//HasPrefix(s1,s2 string类型) 判断s1是不是以s2开头 返回bool类型//HasSuffix(s1,s2 string类型) 判断s1是不是以s2结尾 返回bool类型en_str_8 := "IP:192.168.100.254"fmt.Println("en_str_8 是否以IP 开头:", strings.HasPrefix(en_str_8, "IP"))fmt.Println("en_str_8 是否以254 结尾:", strings.HasSuffix(en_str_8, "254"))}
输出结果如下
97
srting 将字符类型转换成文字显示: a
单引号输出中的字节码编码是: 20013
int32
双引号输出字符,而不是字符码: 中
中国
str3=abc萝卜子,占用的字节数是(中文占用3字节): 12
str4=...中国china,的字符个数是: 10
--------------------转义字符:
hello
" \world
反引号包裹的字符串——> 原样输出: hello \n\t\\\" world
--------------------字符串的截取 [start:end] 按字节截取
hell
省略开始: hell
省略结束: o world!
中文不太支持截取操作(按字节截取,中文3字节): 你好�
将整形转成字符串:
str9 is 200,type is string
字符串转成整形:
str9 is 100,type is int
--------------------格式化赋值: my name is luobozi,age is 21
--------------------字符串的遍历
按照字节遍历
97(a) type: uint8
98(b) type: uint8
99(c) type: uint8
100(d) type: uint8
101(e) type: uint8
102(f) type: uint8
103(g) type: uint8 按照字符个数遍历
104 h
101 e
108 l
108 l
111 o
44 ,
33821 萝
21340 卜
23376 子
--------------------字符串的常用方法 -- strings 包
条件成立,子串在str_2中
a在str_2中出现的次数: 3
子串 1 出现在en_str_2下标: 0
子串 4 出现在en_str_2下标: 3
替换匹配到的第一个: hello,HuNanChangSha,luobozi,world
替换全部匹配成功的字符串: hello,HuNanChangSha,luobozi,HuNanChangSha
en_str_4通过 / 符号分割后返回一个数组: [hello world HuNan ChangSha luobozi ]
将en_str_5转换成小写: hello world hunan changsha luobozi
将en_str_6转换成大写: FROM CHANGSHA HUNAN CHINA
en_str_1字母大小写转换后: start|ASDFLJKLfasdasdfASDFIAasdf123ASZasdqweq|END
将en_str_7的前后的 * 号清洗掉: 这是md加粗语法
en_str_8 是否以IP 开头: true
en_str_8 是否以254 结尾: true进程 已完成,退出代码为 0相关文章:
【Go】字符串相关知识点
字符串(String)是 Go 语言中最常用的数据类型之一,广泛应用于文本处理、数据解析、网络通信等场景。Go 语言的字符串是不可变的 UTF-8 字节序列,在性能和安全性方面与其他编程语言有所不同。 源代码 package main//字符类型 byt…...
STAR Decomposition 一种针对极端事件的信号分解方法 论文精读加复现
STAR 分解🚀 在时序预测任务中,为了情绪化信号的各种成分,例如趋势信息季节信息等往往都需要对信号进行分解。目前熟知的分解方式有很多种,经验模态分解 EMD 变分模态分解 VMD ,还有 集合经验模态分解 EEMD,…...
基于SpringBoot + Vue 的房屋租赁系统
基于springboot的房屋租赁管理系统-带万字文档 SpringBootVue房屋租赁管理系统 送文档 本项目有前台和后台两部分、多角色模块、不同角色权限不一样 共分三种角色:用户、管理员、房东 管理员:个人中心、房屋类型管理、房屋信息管理、预约看房管理、合…...
Excel中国式排名,3种方法!
大家好,我是小鱼。 什么是中国式排名呢? 举个例子比如说公司一共有10名员工进行成绩考核,如果9个人考核成绩都是90分,你是89分,按照国际惯用的排名法则:9 个人考核成绩并列第一,你第10名&…...
Flutter:跑马灯公告栏
组件 import dart:async; import package:flutter/material.dart; import package:ducafe_ui_core/ducafe_ui_core.dart;class MarqueeNotice extends StatefulWidget {/// 公告数据列表,每条公告包含title和descfinal List<Map<String, String>> notic…...
Jmeter下载及环境配置
Jmeter下载及环境配置 java环境变量配置配置jdk环境变量检查是否配置成功JMeter下载 java环境变量配置 访问地址: https://www.oracle.com/cn/java/technologies/downloads/ 注意:需要自己注册账号 下载完成,解压后的目录为: …...
【初级篇】如何使用DeepSeek和Dify构建高效的企业级智能客服系统
在当今数字化时代,企业面临着日益增长的客户服务需求。使用Dify创建智能客服不仅能够提升客户体验,还能显著提高企业的运营效率。关于DIfy的安装部署,大家可以参考之前的文章: 【入门级篇】Dify安装+DeepSeek模型配置保姆级教程_mindie dify deepseek-CSDN博客 AI智能客服…...
OpenCV特征提取与深度学习CNN特征提取差异
一、特征生成方式 OpenCV传统方法 手工设计特征:依赖人工设计的算法(如SIFT、FAST、BRIEF)提取图像中的角点、边缘等低层次特征,需手动调整参数以适应不同场景。数学驱动:基于梯度变化、几何变换等数学规…...
微信小程序threejs三维开发
微信小程序threejs开发 import * as THREE from three; const { performance, document, window, HTMLCanvasElement, requestAnimationFrame, cancelAnimationFrame, core, Event, Event0 } THREE .DHTML import Stats from three/examples/jsm/libs/stats.module.js; im…...
关于在vue3中使用keep-live+component标签组合,实现对指定某些组件进行缓存或不缓存的问题
今天收到一个需求,在vue3写的动态组件条件下,要对指定的几个vue组件进行缓存。 我们用到了keep-livecomponent标签进行动态的渲染 可以通过exclude(排除)和include(包含)来进行指定缓存 <el-tabs v-model"activeName" type"card"…...
[Java实战]性能优化qps从1万到3万
一、问题背景 事情起因是项目上springboot项目提供的tps达不到客户要求,除了增加服务器提高tps之外,作为团队的技术总监,架构师,技术扛把子,本着我不入地狱谁入地狱的原则,决心从代码上优化,让客户享受到飞一般的感觉。虽然大多数编程工作在写下第一行代码时已经完成…...
30天学习Java第四天——设计模式
设计模式概述 设计模式是一套被广泛接受的、经过试验的、可反复使用的基于面向对象的软件设计经验总结,它是开发人员在软件设计时,对常见问题的解决方案的总结和抽象。 一句话就是,设计模式是针对软件开发中常见问题和模式的通用解决方案。 …...
HTML块级元素和内联元素(简单易懂)
在HTML中,元素可以分为块级元素(Block-level elements)和内联元素(Inline elements)。这两类元素在页面布局和样式应用上有不同的特点和用途。 一、块级元素(Block-level elements) 1. 定义 …...
Webpack 和 Vite 的主要区别
Webpack 和 Vite 的主要区别,从构建机制、开发体验、生产优化等多个维度进行对比: 1. 构建机制与速度 Webpack 全量打包:启动时必须分析所有模块依赖关系,进行全量打包,生成 Bundle 文件。项目越大,冷启动时…...
大数据-spark3.5安装部署之standalone模式
真实工作中还是要将应用提交到集群中去执行,Standalone模式就是使用Spark自身节点运行的集群模式,体现了经典的master-slave模式。集群共三台机器,具体如下 u22server4spark: master worker u22server4spark2: worke…...
技术视界|构建理想仿真平台,加速机器人智能化落地
在近期的 OpenLoong 线下技术分享会 上,松应科技联合创始人张小波进行了精彩的演讲,深入探讨了仿真技术在机器人智能化发展中的关键作用。他结合行业趋势,剖析了现有仿真平台的挑战,并描绘了未来理想仿真系统的设计理念与实现路径…...
AutoGen多角色、多用户、多智能体对话系统
2023-03-11-AutoGen 使用【autoGenchainlitdeepSeek】实现【多角色、多用户、多智能体对话系统】 1-核心思路 01)技术要点:autoGenchainlitdeepSeek02)什么是autoGen->autogen是微软旗下的多智能体的框架03)什么是chainlit-&g…...
SQL99 多表查询
内连接: select name, depart_name, city from employee e join department d on e.depart_id d.depart_id join location l on d.locat_id l.locat_id; 外连接 注:本图取自博客园大佬"anliux"的博客,原帖链接:【学…...
ubuntu20.04装nv驱动的一些坑
**1.一定要去bios里面关闭secure boot,否则驱动程序需要签名,安装了的驱动无法被识别加载 2.假如没有关闭secure boot然后装了驱动,然后再去关闭secure boot,可能会导致进入不了ubuntu的情况 此时,先恢复secure boot&…...
sql靶场5-6关(报错注入)保姆级教程
目录 sql靶场5-6关(报错注入)保姆级教程 1.第五关 1.步骤一(闭合) 2.步骤二(列数) 3.报错注入深解 4.报错注入格式 5.步骤三(数据库表名) 6.常用函数 7.步骤四(表…...
矩阵分析-浅要理解(深度学习方向)
梯度分析与最优化 在深度学习的任务中,我们所期望的是训练一个神经网络,使得预测结果与真实标签之间的误差最小化,这可以近似看作是一个提供梯度下降等优化找到全局最优解的凸优化问题。 奇异值分解 在信息工程领域,对数据处理的…...
校园安全用电怎么保障?防触电装置来帮您
引言 随着教育设施的不断升级和校园用电需求的日益增长,校园电力系统的安全性和可靠性成为了学校管理的重要课题。三相智能安全配电装置作为一种电力管理设备,其在校园中的应用不仅能够提高电力系统的安全性,还能有效保障师生的用电安全&am…...
第十五届蓝桥杯大学B组(握手问题、小球反弹、好数)
一、握手问题 思路1: 1)先让所有人相互握手 第一个人49次 第二个人48次 第五十个人0次 共计01249 2)减去7个没握手的 016 #include<stdio.h> int main() {int a 50*49/2 - 7*6/2;printf("%d\n",a);return 0; } 运行结果…...
【教学类-43-26】20240312 数独4宫格的所有可能(图片版 576套样式,空1格-空8格,每套65534张*576小图=3千万张小图)
背景需求: 之前做了三宫格所有可能图片 510小图*12套6120图,所以3分钟就生成了 【教学类-43-25】20240311 数独3宫格的所有可能(图片版 12套样式,空1格-空8格,每套510张,共6120小图)-CSDN博客…...
如何手动使用下载并且运行 QwQ-32B-GGUF
首先使用安装 pip install ModelScope 使用 ModelScope 下载对应的模型 modelScope download --model Qwen/QwQ-32B-GGUF qwq-32b-q4_k_m.gguf 第二步开始下载 ollama git clone https://githubfast.com/ggerganov/llama.cpp # githubfast.com 可以加速下载 切换到目录&am…...
Spring Boot对接twilio发送邮件信息
要在Spring Boot应用程序中对接Twilio发送邮件信息,您可以使用Twilio的SendGrid API。以下是一个简单的步骤指南,帮助您完成这一过程: 1. 创建Twilio账户并获取API密钥 注册一个Twilio账户(如果您还没有的话)。在Twi…...
约束优化技术:KKT条件的完整推导与应用
前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 ima 知识库 知识库广场搜索&#…...
大数据面试之路 (二) hive小文件合并优化方法
大量小文件容易在文件存储端造成瓶颈,影响处理效率。对此,您可以通过合并Map和Reduce的结果文件来处理。 一、合并小文件的常见场景 写入时产生小文件:Reduce任务过多或数据量过小,导致每个任务输出一个小文件。 动态分区插入&…...
对比文章相似度的余弦相似度算法的原理
近期不是项目遇到对比代码的相似度,来判断代码是否存在抄袭嘛。通过研究采用了余弦相似度来对比。既然接触的一个新的东西,怎么也得研究下吧。 一、什么是余弦相似度 利用余弦相似度对比文章相似度的原理,主要基于向量空间模型,通…...
使用vue的路由打开新标签页跳转
vue的路由只支持在本标签页跳转,要用vue的路由打开新标签页需要做处理再用window.open方法打开: // 在当前标签页中跳转 router.push({path: /new-page,query: {id: id.toString(),} });// 在新标签页中打开 const routeData router.resolve({path: /n…...
