You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用映射表将字符串中的阿拉伯文数字转换为阿拉伯数字字符?

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:03:13