Go语言如何识别字符串中的双字节空格并转换为单字节空格
Go语言全角空格转半角空格实现方案
核心问题解答
- 不需要手动遍历每个字符,Go标准库已经提供了开箱即用的字符串替换方法,直接替换目标字符即可,底层已经完成rune级别的匹配处理
- 双字节全角空格的Unicode编码值为
U+3000,对应Go中rune类型的字面量可以直接写为全角空格本身' ',或者数值形式0x3000
最简实现代码
只需要调用strings.ReplaceAll方法即可完成单一场景的全角空格转半角需求:
package main import ( "fmt" "strings" ) func main() { // 示例字符串,中间间隔为全角空格 src := "こんにちは 世界" // 直接替换所有全角空格为半角空格 res := strings.ReplaceAll(src, " ", " ") fmt.Println(res) // 输出:こんにちは 世界 }
通用多字符替换扩展(可选)
如果后续需要同时处理其他全角字符转半角的需求,可以用strings.Map方法自定义转换规则:
package main import ( "fmt" "strings" ) func fullWidthToHalfWidth(r rune) rune { // 匹配全角空格 if r == 0x3000 { return ' ' } // 可扩展其他全角字符转换逻辑:全角字母数字Unicode范围U+FF01~U+FF5E,对应半角偏移量为0xfee0 if r >= 0xFF01 && r <= 0xFF5E { return r - 0xFEE0 } return r } func main() { src := "こんにちは 世界 123ABC" res := strings.Map(fullWidthToHalfWidth, src) fmt.Println(res) // 输出:こんにちは 世界 123ABC }
实现原理说明
Go的字符串底层是UTF-8编码的字节数组,strings包的替换、Map等方法默认都会按UTF-8规则识别每个rune(Unicode字符),不需要手动拆分字节判断双字节字符,可避免手动处理编码的边界错误。
内容的提问来源于stack exchange,提问作者vigamage
相关产品推荐
相关产品推荐

