当前位置: 首页 > article >正文

Go语言中的字符串处理

Go语言中的字符串处理1. 字符串的基本概念在Go语言中字符串是一种不可变的字节序列使用UTF-8编码。字符串的类型为string是Go语言的基本类型之一。package main import fmt func main() { // 字符串字面量 s1 : Hello, World! fmt.Println(s1) // 原始字符串字面量 s2 : Line 1 Line 2 fmt.Println(s2) }2. 字符串的基本操作2.1 字符串长度package main import fmt func main() { s : Hello, 世界 // 字节长度 fmt.Println(Byte length:, len(s)) // 字符长度 fmt.Println(Rune length:, len([]rune(s))) }2.2 字符串拼接package main import fmt func main() { // 使用运算符 s1 : Hello World fmt.Println(s1) // 使用fmt.Sprintf s2 : fmt.Sprintf(%s %s, Hello, World) fmt.Println(s2) // 使用strings.Builder推荐 var builder strings.Builder builder.WriteString(Hello) builder.WriteString( ) builder.WriteString(World) s3 : builder.String() fmt.Println(s3) }2.3 字符串切片package main import fmt func main() { s : Hello, World! // 切片操作 fmt.Println(s[0:5]) // Hello fmt.Println(s[7:]) // World! fmt.Println(s[:5]) // Hello }3. strings包的使用3.1 字符串查找package main import ( fmt strings ) func main() { s : Hello, World! // 查找子串 fmt.Println(strings.Contains(s, World)) // true fmt.Println(strings.Index(s, World)) // 7 fmt.Println(strings.LastIndex(s, l)) // 9 }3.2 字符串分割package main import ( fmt strings ) func main() { s : a,b,c,d // 分割字符串 parts : strings.Split(s, ,) fmt.Println(parts) // [a b c d] // 分割为两个部分 before, after, found : strings.Cut(s, ,) fmt.Println(before, after, found) // a b,c,d true }3.3 字符串替换package main import ( fmt strings ) func main() { s : Hello, World! // 替换所有 result : strings.ReplaceAll(s, World, Go) fmt.Println(result) // Hello, Go! // 替换指定次数 result strings.Replace(s, l, X, 2) fmt.Println(result) // HeXXo, World! }3.4 字符串转换package main import ( fmt strings ) func main() { s : Hello, World! // 转大写 fmt.Println(strings.ToUpper(s)) // HELLO, WORLD! // 转小写 fmt.Println(strings.ToLower(s)) // hello, world! // 首字母大写 fmt.Println(strings.Title(s)) // Hello, World! }3.5 字符串修剪package main import ( fmt strings ) func main() { s : Hello, World! // 修剪空格 fmt.Println(strings.TrimSpace(s)) // Hello, World! // 修剪指定字符 fmt.Println(strings.Trim(s, H!)) // ello, World }4. 字符串的高级操作4.1 字符串和字节切片的转换package main import fmt func main() { s : Hello // 字符串转字节切片 b : []byte(s) fmt.Println(b) // [72 101 108 108 111] // 字节切片转字符串 s2 : string(b) fmt.Println(s2) // Hello }4.2 字符串和rune切片的转换package main import fmt func main() { s : Hello, 世界 // 字符串转rune切片 r : []rune(s) fmt.Println(r) // [72 101 108 108 111 44 32 19990 30028] // rune切片转字符串 s2 : string(r) fmt.Println(s2) // Hello, 世界 }4.3 字符串遍历package main import fmt func main() { s : Hello, 世界 // 字节遍历 fmt.Println(Byte iteration:) for i, b : range []byte(s) { fmt.Printf(%d: %d\n, i, b) } // rune遍历 fmt.Println(Rune iteration:) for i, r : range s { fmt.Printf(%d: %c\n, i, r) } }5. 字符串处理的性能优化5.1 字符串拼接优化package main import ( fmt strings ) func main() { // 低效的拼接方式 var s string for i : 0; i 1000; i { s fmt.Sprintf(%d, i) } // 高效的拼接方式 var builder strings.Builder for i : 0; i 1000; i { builder.WriteString(fmt.Sprintf(%d, i)) } s builder.String() }5.2 字符串比较优化package main import ( fmt strings ) func main() { s1 : Hello s2 : Hello // 字符串比较 fmt.Println(s1 s2) // true // 不区分大小写比较 fmt.Println(strings.EqualFold(s1, s2)) // true }6. 实战应用6.1 解析CSV数据package main import ( fmt strings ) func parseCSV(csv string) [][]string { lines : strings.Split(csv, \n) var result [][]string for _, line : range lines { if line { continue } fields : strings.Split(line, ,) result append(result, fields) } return result } func main() { csv : name,age,city\nAlice,30,New York\nBob,25,London data : parseCSV(csv) for _, row : range data { fmt.Println(row) } }6.2 生成URL参数package main import ( fmt strings ) func buildQueryParams(params map[string]string) string { var parts []string for key, value : range params { parts append(parts, keyvalue) } return strings.Join(parts, ) } func main() { params : map[string]string{ name: Alice, age: 30, city: New York, } query : buildQueryParams(params) fmt.Println(Query:, query) }6.3 字符串模板package main import ( fmt strings ) func renderTemplate(template string, data map[string]string) string { result : template for key, value : range data { placeholder : {{ key }} result strings.ReplaceAll(result, placeholder, value) } return result } func main() { template : Hello, {{name}}! You are {{age}} years old. data : map[string]string{ name: Alice, age: 30, } result : renderTemplate(template, data) fmt.Println(result) }7. 总结字符串是不可变的字节序列使用UTF-8编码使用len()获取字符串的字节长度使用[]rune()转换为rune切片来获取字符长度使用strings.Builder进行高效的字符串拼接使用strings包提供的函数进行各种字符串操作注意字符串遍历的两种方式字节遍历和rune遍历对于频繁的字符串操作选择合适的方法以提高性能掌握字符串与其他类型的相互转换

相关文章:

Go语言中的字符串处理

Go语言中的字符串处理 1. 字符串的基本概念 在Go语言中,字符串是一种不可变的字节序列,使用UTF-8编码。字符串的类型为string,是Go语言的基本类型之一。 package mainimport "fmt"func main() {// 字符串字面量s1 : "Hello, W…...

Go语言中的包管理

Go语言中的包管理 1. 包管理的基本概念 包管理是Go语言开发中的重要部分,它负责管理项目的依赖关系。Go语言的包管理经历了几个阶段: GOPATH模式vendor模式Go Modules模式(当前推荐) 2. Go Modules简介 Go Modules是Go 1.11引入的…...

Minecraft启动器与游戏配置工具全攻略:从新手到大师的进阶指南

Minecraft启动器与游戏配置工具全攻略:从新手到大师的进阶指南 Minecraft启动器是每一位玩家进入方块世界的第一道门,而一款优秀的游戏配置工具则能让你的冒险之旅更加顺畅。本文将以玩家视角,带你深入了解如何利用PCL2-CE这款强大的开源工具…...

终极EdgeRemover指南:专业卸载Windows Edge浏览器的完整解决方案

终极EdgeRemover指南:专业卸载Windows Edge浏览器的完整解决方案 【免费下载链接】EdgeRemover PowerShell script to remove Microsoft Edge in a non-forceful manner. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover EdgeRemover是一款专业的P…...

《Linux网络编程》2.Socket编程(UDP/TCP)

💡Yupureki:个人主页 ✨个人专栏:《C》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》 《个人在线OJ平台》《Linux网络编程》 🌸Yupureki🌸的简介: 目录 1. UDP编程 1.1 常用接口 1.1.1 socket() – 创建套接字 1.1.2 bin…...

网安实验干货每日分享(Weevely配置使用)

网安实验干货每日分享(Weevely配置使用)-1031 渗透测试环境搭建与工具使用-Weevely配置使用 实验目的 熟悉Webshell管理工具Weevely的配置使用。 实验环境 操作机:Kali2018-TS (1)操作系统:Kali Linu…...

革新游戏配置体验:PCL2-CE社区版,Minecraft玩家的效率神器

革新游戏配置体验:PCL2-CE社区版,Minecraft玩家的效率神器 PCL2-CE社区版是一款开源游戏配置工具,它不仅能让玩家轻松管理Minecraft游戏环境,更能通过智能时间管理、跨平台同步等功能,为玩家节省宝贵的游戏时间&#…...

新手必看,用快马生成的示例代码轻松学懂stm32f103c8t6引脚配置

作为一个刚接触STM32的开发者,我完全理解新手面对芯片引脚配置时的困惑。最近在InsCode(快马)平台尝试生成STM32F103C8T6的示例代码时,发现它特别适合用来建立引脚功能与代码的映射关系。下面分享我的学习过程: 理解芯片引脚特性 STM32F103C…...

终极AI图像分层指南:3分钟将复杂插画变成可编辑PSD图层

终极AI图像分层指南:3分钟将复杂插画变成可编辑PSD图层 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾面对一幅精美的数字插画&…...

智能音乐情绪生成器:当AI遇见音乐,用代码谱写情感旋律

引言:音乐与情感的数字化探索音乐是人类情感最直接的表达方式之一,欢快的旋律让人振奋,悲伤的曲调令人沉思。在人工智能时代,我们能否让机器理解情感,并创作出符合特定情绪的音乐?本文将带你走进一个融合了…...

攻克模电难点(一):多级放大电路与差动放大电路实战解析

1. 多级放大电路的设计基础 第一次接触多级放大电路时,我被各种耦合方式绕得头晕。直到在实验室烧坏几个三极管后,才真正理解其中的门道。多级放大电路的核心思想很简单:把多个单级放大电路像搭积木一样连接起来,但实际设计时却要…...

ai辅助开发:向快马描述你的微服务项目,智能生成全套java环境配置与编排文件

最近在搭建一个分布式微服务项目时,遇到了环境配置这个老大难问题。不同模块需要不同中间件,团队成员电脑环境各异,每次新人加入都要折腾半天环境。好在发现了InsCode(快马)平台的AI辅助开发功能,用自然语言描述需求就能自动生成全…...

Apache Paimon面试通关秘籍-快照机制深度解析

1. 快照机制:Paimon的时光机原理 第一次接触Paimon的快照功能时,我脑海中浮现的是《哆啦A梦》里的时光机——它能带你回到任意时间点查看数据的历史状态。这个看似简单的功能背后,其实藏着Paimon最核心的设计哲学。 快照本质上就是数据表在某…...

JavaScript基础课程二、学习JavaScript路线图

JavaScript 全栈学习路线 JavaScript 基础→进阶→高级→跨平台实战 这是一套零基础可入门、循序渐进、覆盖全场景的 JavaScript 学习路线,包含学习重点、实战项目、工具资源和避坑指南,学完可独立开发网页、小程序、APP、桌面软件、后端服务。 一、先搞懂:JavaScript 到…...

VisualCppRedist AIO:Windows系统运行库的一站式解决方案

VisualCppRedist AIO:Windows系统运行库的一站式解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO是一个开源项目&#x…...

从滤波到故障诊断:手把手教你用MATLAB实现信号互相关分析的实际项目

从振动信号到故障定位:MATLAB互相关分析的工业实战指南 车间里那台大型离心泵的异常振动已经持续两周了。王工程师带着加速度传感器采集了三组不同位置的振动信号,屏幕上跳动的波形看起来杂乱无章。"到底是轴承磨损还是叶轮不平衡?"…...

Calico-Node Pod 启动时 READY 状态卡在 0/1 排查流程

Calico Node 启动失败 故障表现 发现请求集群 demo 入口时卡住,并且对应 Pod 没有新的日志输出 rootce-demo-1:~# kubectl get pods -n deepflow-otel-spring-demo -o wide NAME READY STATUS RESTARTS AGE IP …...

Linux日志高效搜索:从基础grep到journalctl实战技巧

1. Linux日志搜索:运维工程师的必备技能 每次服务器出现异常,第一反应是什么?没错,就是查日志。作为在Linux系统摸爬滚打多年的老运维,我见过太多新手面对海量日志时的手足无措。其实日志排查就像破案,关键…...

关于爬虫源影视资源设置

1.首先目前的omnibox的版本已更新到2.0.3版本,之前的配置会丢失,原本的资源都会无法使用,这里以新版本增加数据源,看完以下教程再下载脚本。 2.添加爬虫源,这里以猫眼资源为主测试: 增加脚本之后,点击保存即可! 复制以下脚本,修复改site_api即可,一般公用的资源都是正…...

【无标题】修改+删除顶层class

# 最顶层的class信息如何删除-- 步骤1:删除该班级学生关联的成绩(先删最底层score表) DELETE FROM score WHERE studentNo IN (SELECT studentNo FROM student0 WHERE classNo210601);-- 步骤2:删除该班级的所有学生(再…...

Java Web 入门学习笔记:Servlet 请求响应与登录功能实战

一、开篇:今日学习核心与目标学习背景:Java Web 入门阶段核心 ——Servlet 与 HTTP 请求响应交互学习目标:掌握 HttpServletRequest/HttpServletResponse 核心用法实现「登录表单提交→Servlet 验证→页面重定向」完整流程解决实操中 404、中…...

AI编程革命:重塑程序员未来(一)

AI编程时代到来AI不会让程序员消失,但会深刻重塑这个职业。当代码生成变得轻而易举,程序员 的角色将从“代码编写者”升级为“问题解决者”与“架构设计师”。未来的核心竞争力,在于 理解复杂业务、设计系统逻辑,并用人类独有的创…...

K均值算法(C++版)

选用K均值算法对一串整形数据(100行,100列)进行聚类。输出两个结果文件:1)第一个输出结果文件为cluster_centers.txt,其中输出聚类得到的各区域(聚类)的中心,以及每个聚类…...

Nginx 高可用、负载均衡与 HTTPS 配置实战(一)

Nginx作为当下最主流的开源反向代理与Web服务器,凭借轻量、高性能、高并发的特性,成为企业级服务入口的首选方案。在生产环境中,单节点Nginx存在单点故障风险,并发请求过高会导致服务卡顿,同时HTTP明文传输存在数据泄露…...

bilibili-api技术解析:如何解决视频标识符转换核心问题

bilibili-api技术解析:如何解决视频标识符转换核心问题 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mir…...

11. v4 版本升级指南

11. v4 版本升级指南 1. 概述 Tailwind CSS v4 是一个重大版本更新,从 JavaScript 配置转向 CSS 优先的配置方式。 1.1 主要变化 变化v3v4配置方式tailwind.config.jsCSS 文件 (theme)安装方式postcss tailwindcsstailwindcss/vite 等暗色模式dark: 前缀相同&a…...

告别硬编码!用Rule-Engine 1.0.0重构你的Java业务逻辑(附订单折扣实战)

告别硬编码!用Rule-Engine 1.0.0重构你的Java业务逻辑(附订单折扣实战) 每次电商大促前夜,技术团队最怕听到的一句话是什么?"折扣规则又改了!"——这往往意味着通宵修改代码、紧急测试和冒着风险…...

脑网络通信指标——扩散策略的流图指标

和平均首达时间一样,这个指标也是脑网络扩散通信方式的一个指标。这个指标的计算公式也是非常云里雾里,不找原文献推公式看不懂的。 首先给公式: 流图矩阵中的一条边:FG(t)ij = (e^(-tL))ijsj 其中sj = ∑jAij,Aij 就是两个节点之间的结构连接强度,sj就是j节点的强度;…...

【黑金云课堂笔记】第一~二期FPGA知识点总结

知识卡片一:【FPGA 基础篇】开启硬件编程之门FPGA 的本质: FPGA(现场可编程门阵列)并非在运行软件程序,而是在构建电路本身。用户可以通过 Verilog/VHDL 等硬件描述语言,在芯片出厂后随时重新配置其内部逻辑…...

实战应用:基于openclaw在快马平台开发招聘信息采集系统

最近在做一个招聘信息分析的小项目,需要从各大招聘网站采集数据。经过一番调研,发现openclaw这个工具在数据采集方面表现相当不错,特别是在处理复杂页面和反爬机制上很有优势。下面分享一下我在InsCode(快马)平台上开发这个系统的实战经验。 …...