如何筛选含阿拉伯数字的字符串并转换为英文数字?
解决方案
要实现仅对包含阿拉伯文数字(如٠٥٥这类字符)的字符串进行转换,你需要先完成两步:精准识别包含阿拉伯文数字的字符串,再对符合条件的字符串调用转换函数。
1. 编写阿拉伯文数字检测函数
阿拉伯文数字主要覆盖两个Unicode字符范围:
- 阿拉伯文-Indic数字:
U+0660(٠)到U+0669(٩) - 阿拉伯文-Eastern数字:
U+06F0(۰)到U+06F9(۹)
基于这个范围,我们可以写一个检测函数:
private bool HasArabicIndicDigits(string input) { foreach (char c in input) { if ((c >= '\u0660' && c <= '\u0669') || (c >= '\u06F0' && c <= '\u06F9')) { return true; } } return false; }
2. 遍历列表处理字符串
遍历你的字符串列表,仅对检测到阿拉伯文数字的字符串调用转换函数:
// 假设你的原始字符串列表是List<string> originalStrings List<string> processedStrings = new List<string>(); foreach (string str in originalStrings) { if (HasArabicIndicDigits(str)) { processedStrings.Add(toEnglishNumber(str)); } else { processedStrings.Add(str); } }
3. 优化原转换函数(可选但推荐)
原函数用+=拼接字符串的效率较低,建议改用StringBuilder提升性能,同时优化数字转换逻辑:
private string toEnglishNumber(string input) { StringBuilder result = new StringBuilder(); foreach (char c in input) { if (char.IsDigit(c)) { // 将数字字符直接转成对应的英文数字字符(如٥→'5') int numValue = (int)char.GetNumericValue(c); result.Append((char)('0' + numValue)); } else { result.Append(c); } } return result.ToString(); }
这样处理后,像"٠٥٥ ٥٣٠ ٨٦٨٤"这类包含阿拉伯文数字的字符串会被转换,而纯英文数字(如"123")或不含阿拉伯文数字的字符串会直接保留原样。
内容的提问来源于stack exchange,提问作者Faizan Naeem
相关产品推荐
相关产品推荐

