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

go清除3字节字符

在 Go 中清除(删除)一个 3 字节字符(如中文、日文等多字节 UTF-8 字符),需要正确处理字符串的字节边界。

核心问题

Go 的string字节序列,不是字符序列。直接按索引删除字节会破坏 UTF-8 编码。

正确方法

方法 1:转换为 rune 切片(推荐)

go

package main import "fmt" func removeRune(s string, index int) string { runes := []rune(s) if index < 0 || index >= len(runes) { return s } return string(runes[:index]) + string(runes[index+1:]) } func main() { s := "你好世界" // 每个中文3字节,共12字节 fmt.Printf("原字符串: %q, 字节数: %d\n", s, len(s)) // 字节数: 12 // 删除第1个字符("你") result := removeRune(s, 0) fmt.Printf("删除后: %q, 字节数: %d\n", result, len(result)) // "好世界", 字节数: 9 }

方法 2:使用 UTF-8 包处理字节边界

go

package main import ( "fmt" "unicode/utf8" ) func removeRuneByByteIndex(s string, byteIndex int) string { if byteIndex < 0 || byteIndex >= len(s) { return s } // 找到该字节位置所在的 rune 起始位置 start := byteIndex for start > 0 && !utf8.RuneStart(s[start]) { start-- } // 获取该 rune 的宽度 _, width := utf8.DecodeRuneInString(s[start:]) return s[:start] + s[start+width:] } func main() { s := "你好世界" // 删除"你"(从字节0开始,宽3字节) result := removeRuneByByteIndex(s, 0) fmt.Printf("删除后: %q\n", result) // "好世界" // 删除"好"(从字节3开始,宽3字节) result2 := removeRuneByByteIndex(s, 3) fmt.Printf("删除后: %q\n", result2) // "你世界" }

方法 3:遍历删除特定字符

go

package main import "fmt" func removeChar(s string, target rune) string { result := make([]rune, 0, len([]rune(s))) for _, r := range s { if r != target { result = append(result, r) } } return string(result) } func main() { s := "你好世界好" result := removeChar(s, '好') // 删除所有"好" fmt.Printf("删除后: %q\n", result) // "你世界" }

关键要点

表格

要点说明
[]rune转换最直观,但有内存分配开销
utf8.DecodeRuneInString零分配,高效处理字节边界
切勿直接s[:3]+s[6:]可能切在 rune 中间,导致乱码
3字节字符中文、日文等常见 BMP 字符,Go 中rune值为0x800-0xFFFF

需要针对具体场景(按索引删除、按字符删除、高性能要求等)选择合适的方法

http://www.jsqmd.com/news/1170742/

相关文章:

  • 2026年7月最新苏州雷达官方售后客服服务电话及地址网点大全 - 亨得利钟表维修中心
  • TPS61170与MK20DX128VFM5构建高效DC-DC升压电源方案
  • VSCode Dev Containers 1.85 + ROS Noetic 远程开发:3步配置SSH免密与容器热重载
  • 卡梅德生物技术快报|噬菌体文库构建:噬菌体文库构建标准化工程方案:ALV-p27 免疫 scFv 库搭建与多维度质控验证
  • SC031GS 全局快门传感器对比:TRIG 外部触发 vs 内部自动曝光,3 大应用场景分析
  • 2026年7月最新嘉兴宝玑官方售后热线及客户服务网点地址 - 亨得利钟表维修中心
  • 2026年乐山企业宣传片制作公司排行榜:会议活动拍摄|视频直播服务商TOP榜单 - 政企影像扫地僧
  • 浪琴官方售后服务中心网点地址和电话实地考察报告_多信源验证(2026年7月最新) - 浪琴官方售后服务中心
  • 2026年国内铝箔餐盒供应链市场动态新闻报道 - 起跑123
  • 卡地亚中国官方售后服务中心|官方地址及售后服务热线权威信息公告(2026年7月最新) - 卡地亚官方售后中心
  • Unity跨平台文件选择实战:Standalone File Browser插件深度解析与三端兼容指南
  • FREE!ship Plus:从零开始的船舶设计开源解决方案
  • 亲身到店探访郑州欧米茄官方售后服务中心|完整维修地址与售后热线(2026年7月最新) - 欧米茄官方服务中心
  • 还在手动查AI回答?搜极星+InsGEO 帮你从“看一眼“到“长期盯“
  • 2026年青岛高评价高粘双面胶订购厂家综合考量与推荐 - 品牌鉴赏官2026
  • 靠谱的区域教育一体化管理平台哪个选得好
  • STM32F745ZG与CMT-8540S-SMT音频模块开发指南
  • Cisco Packet Tracer 9.0 实战:3步完成VLAN间路由配置(附完整拓扑)
  • 基于MAX9744与STM32F030RC的高效音频功率增强方案
  • Unity根骨骼动画漂移问题:原理、诊断与系统化解决方案
  • GPT-5.6找不到正常吗?5个原因一次讲清
  • 2026年宁波标识行业市场发展现状及主流服务商盘点 - 起跑123
  • 欧米茄分针夜光和表盘夜光不一致的维修方法权威公示(2026年7月最新) - 欧米茄服务中心
  • 周评|梳理近期行业变化:监管逐步完善、算力价值凸显、AI 持续向实体场景延伸
  • 2026年Q3上海国际认证服务行业深度观察:多标准合规格局下的专业服务商盘点 - 甄选服务推荐
  • 基于TPA3128D2与PIC32MX的高保真数字音频放大系统设计
  • 从内容投喂到信源博弈:GEO运营的本质转变
  • L9958与PIC18LF46K42的高性能电机控制系统设计
  • 2026年7月别墅保险柜选购实用性全维度评测指南 - 起跑123
  • BUUCTF 特殊的 BASE64