2015-06-20 2 views
0

Мне нужно заменить кириллические символы, чтобы быть транслитерированными латинскими символами. К сожалению, мое решение всегда возвращает -1 при поиске позиции символа.
Что не так с этим?
C# Заменить кириллические символы не удалось

  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()); 
+0

'position_s' содержит числовой индекс, т. Е. ** позицию ** элемента в массиве. Вы видите, что делает ваш код? ;-) – elgonzo

+0

@elgonzo, да, вы правы, но -1 я получил здесь: var position_s = Array.IndexOf (slavicchars, x); –

+1

Хе-хе, слепота меня погладила ... :) 'x' имеет тип char, но ваш массив имеет тип string []. Сделать slavicchars 'char []' array. – elgonzo

ответ

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.
Смежные вопросы