如何利用映射表将字符串中的阿拉伯文数字转换为阿拉伯数字字符?
如何在Go中将阿拉伯文数字字符替换为ASCII数字?
你可以通过字符映射+遍历转换的方式轻松实现这个需求,下面给你两种简洁高效的实现方案,同时优化你原来的映射表设计:
方案1:使用strings.Map(推荐,代码最简洁)
首先把你的数字映射表改成rune到rune的结构(因为Go中处理UTF-8字符用rune更直接),然后利用strings.Map函数批量转换每个字符:
package main import ( "fmt" "strings" ) // 阿拉伯文数字到ASCII数字的映射表 var digitConv = map[rune]rune{ '۰': '0', '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9', } // 转换函数:遍历字符串每个字符,替换阿拉伯文数字 func convertArabicIndicDigits(s string) string { return strings.Map(func(r rune) rune { // 如果当前字符在映射表中,返回对应的ASCII数字;否则保留原字符 if replacement, exists := digitConv[r]; exists { return replacement } return r }, s) } func main() { num := "000۲۱۷۹۰۰" convertedNum := convertArabicIndicDigits(num) fmt.Println(convertedNum) // 输出:000217900 // 如果需要先检查字符串是否包含阿拉伯文数字,可以用正则 // matched, _ := regexp.MatchString(`[۰-۹]`, num) // fmt.Println("是否包含阿拉伯文数字:", matched) }
方案2:手动遍历+strings.Builder
如果你更倾向于手动控制遍历过程,可以用strings.Builder来构建结果字符串,逻辑和上面一致:
func convertArabicIndicDigits(s string) string { var result strings.Builder for _, r := range s { if replacement, exists := digitConv[r]; exists { result.WriteRune(replacement) } else { result.WriteRune(r) } } return result.String() }
为什么优化映射表?
你原来的map[string]int需要把字符串转成整数再转回字符,步骤繁琐;而map[rune]rune直接处理Unicode字符,一步到位,更符合Go的字符串处理习惯,也更高效。
内容的提问来源于stack exchange,提问作者user14206728
相关产品推荐
相关产品推荐

