C#替换西里尔字母失败

时间:2015-06-20 10:21:01

标签: c# string char

我需要替换西里尔字母作为音译拉丁字符。不幸的是,当搜索char位置时,我的解决方案总是返回-1 这有什么问题?

            StringBuilder sb = new StringBuilder();
            var domain = ConfigurationManager.AppSettings["Domain"];
            catname = catname.ToLower();
            var englishchars = new string[] { "a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "c", "ch", "sh", "shch", "i", "e", "yu", "ya", "_" };
            var slavicchars = new string[] { "a", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "э", "ю", "я", " " };
            foreach (char x in catname)
            {
                var position_s = Array.IndexOf(slavicchars, x);
                var char_e = Array.IndexOf(englishchars, position_s);
               sb.Append(englishchars[char_e]);
            }
            return String.Format("{0}/katalog/kategorii/{1}", domain, sb.ToString());

1 个答案:

答案 0 :(得分:1)

请尝试以下代码:

StringBuilder sb = new StringBuilder();
var domain = ConfigurationManager.AppSettings["Domain"];
catname = catname.ToLower();
var englishchars = new[] { "a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "c", "ch", "sh", "shch", "i", "e", "yu", "ya", "_" };
var slavicchars = new[] { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'э', 'ю', 'я', ' ' };
foreach (char x in catname)
{
    var position_s = Array.IndexOf(slavicchars, x);
    if (position_s == -1)
        sb.Append(x);
    else
        sb.Append(englishchars[position_s]);
}
return String.Format("{0}/katalog/kategorii/{1}", domain, sb.ToString());

我发现您的代码存在以下问题:

  • slavicchars中,第一个字符'a'是拉丁字母。
  • 在您的代码中,slavicchars数组是一个字符串数组,但不是字符数组,因此Array.IndexOf(slavicchars, x)始终返回-1