String.Replace() 的效率非常低,您必须为您想要替换的每个可能的西里尔字母调用它。请改用字典(无双关语)。例如:
\n\n private const string Cyrillic = "Aa\xd0\x91\xd0\xb1\xd0\x92\xd0\xb2\xd0\x93\xd0\xb3...";\n private const string Latin = "A|a|B|b|V|v|G|g|...";\n private Dictionary<char, string> mLookup;\n\n public string Romanize(string russian) {\n if (mLookup == null) {\n mLookup = new Dictionary<char, string>();\n var replace = Latin.Split(\'|\');\n for (int ix = 0; ix < Cyrillic.Length; ++ix) {\n mLookup.Add(Cyrillic[ix], replace[ix]);\n }\n }\n var buf = new StringBuilder(russian.Length);\n foreach (char ch in russian) {\n if (mLookup.ContainsKey(ch)) buf.Append(mLookup[ch]);\n else buf.Append(ch);\n }\n return buf.ToString();\n }\nRun Code Online (Sandbox Code Playgroud)\n\n请注意在拉丁语替换中如何需要条形图和 Split() 函数,因为某些西里尔字母需要多个字母才能进行音译。关键思想是使用字典进行快速查找,并使用字符串生成器进行快速字符串构建。
\n\n这份联合国文件可能会有所帮助。
\n| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |