Dart 中阿拉伯数字与英文数字互相转换及替换的实现方法
Dart 实现 ASCII 数字与阿拉伯语数字双向转换方案
首先明确对应关系:你提到的1-2-3-4-5-6-7-8-9 与 ١-٢-٣-٤-٥-٦-٧-٨-٩ 匹配,以下实现默认包含0的转换(不需要可直接删除映射表中0的对应项)。
1. 核心映射定义
先定义双向映射表,后续所有转换逻辑都基于该表实现:
// ASCII数字(即你所说的英文数字)转阿拉伯语数字的映射 const asciiToArabicMap = { '0': '٠', '1': '١', '2': '٢', '3': '٣', '4': '٤', '5': '٥', '6': '٦', '7': '٧', '8': '٨', '9': '٩', }; // 阿拉伯语数字转ASCII数字的映射 const arabicToAsciiMap = { '٠': '0', '١': '1', '٢': '2', '٣': '3', '٤': '4', '٥': '5', '٦': '6', '٧': '7', '٨': '8', '٩': '9', };
2. 单字符转换
实现单个字符的精准转换,非数字字符会直接返回原内容,不会报错:
/// 单个ASCII数字字符转阿拉伯语数字 String convertAsciiDigitToArabic(String char) { return asciiToArabicMap[char] ?? char; } /// 单个阿拉伯语数字字符转ASCII数字 String convertArabicDigitToAscii(String char) { return arabicToAsciiMap[char] ?? char; }
3. 全字符串批量替换
如果需要转换整个字符串中所有匹配的数字,直接调用以下方法即可,非数字内容会原样保留:
/// 替换字符串中所有ASCII数字为阿拉伯语数字 String replaceAsciiDigitsToArabic(String input) { return input.split('').map(convertAsciiDigitToArabic).join(); } /// 替换字符串中所有阿拉伯语数字为ASCII数字 String replaceArabicDigitsToAscii(String input) { return input.split('').map(convertArabicDigitToAscii).join(); }
4. 用法示例
void main() { // ASCII转阿拉伯语数字示例 const testStr1 = "Order No: 123456789"; final converted1 = replaceAsciiDigitsToArabic(testStr1); print(converted1); // 输出:Order No: ١٢٣٤٥٦٧٨٩ // 阿拉伯语数字转ASCII示例 const testStr2 = "الرقم هو ٩٨٧٦٥٤٣٢١"; final converted2 = replaceArabicDigitsToAscii(testStr2); print(converted2); // 输出:الرقم هو 987654321 }
5. 高性能优化方案
如果需要处理超长字符串,推荐用正则替换替代逐字符遍历,运行效率更高:
// 正则版本ASCII转阿拉伯语数字 String replaceAsciiDigitsToArabicRegExp(String input) { return input.replaceAllMapped(RegExp(r'[0-9]'), (match) => asciiToArabicMap[match.group(0)]!); } // 正则版本阿拉伯语转ASCII数字 String replaceArabicDigitsToAsciiRegExp(String input) { return input.replaceAllMapped(RegExp(r'[٠-٩]'), (match) => arabicToAsciiMap[match.group(0)]!); }
内容的提问来源于stack exchange,提问作者Abdelrahman Tareq
相关产品推荐
相关产品推荐

