2010-09-16 4 views
2

Мне нужно исправить ненужные символы в строке. нежелательные символы:Исправление символов в строке?

«C» вместо «с» «я» вместо «Я» «и» вместо «ü» «г» вместо «г» «о» вместо " ö « « s »вместо« ş »

Я написал этот метод. Но это не работает.

public string UrlCorrection(string text) 
    { 
     text = (text.ToLower()).Trim(); 
     var length = text.Length; 
     char chr; 
     string newtext=""; 
     for (int i = 0; i < length; i++) 
     { 
      chr = text[i]; 
      switch (chr) 
      { 
       case 'ç': 
        newtext = text.Replace("ç", "c"); 
        break; 
       case 'ı': 
        newtext = text.Replace("ı", "i"); 
        break; 
       case 'ü': 
        newtext = text.Replace("ü", "u"); 
        break; 
       case 'ğ': 
        newtext = text.Replace("ğ", "g"); 
        break; 
       case 'ö': 
        newtext = text.Replace("ö", "o"); 
        break; 
       case 'ş': 
        newtext = text.Replace("ş", "s"); 
        break; 
       default: 
        break; 
      } 

     } 
     newtext = text; 
     return text; 
    } 

Как мне выполнить эту задачу?

ответ

2

ли это так:

public string UrlCorrection (string text) 
{ 
    StringBuilder correctedText = new StringBuilder (text); 

    return correctedText.Replace("ç", "c") 
         .Replace("ı", "i") 
         .Replace("ü", "u") 
         .Replace("ğ", "g") 
         .Replace("ö", "o") 
         .Replace("ş", "s") 
         .ToString(); 
} 
+0

Это не сработает, потому что он называет text.Replace каждый раз. Будет заменен только последний совпадающий символ. –

+0

Справа. Не просматривайте код перед написанием ответа. – 2010-09-16 12:56:15

+0

нет. это не решило мою проблему. Я не знаю, где проблема. – beratuslu

5

В принципе, вы можете просто сделать это:

newtext = text.Replace("ç", "c"); 
newtext = newtext.Replace("ı", "i"); 
newtext = newtext.Replace("ü", "u"); 
newtext = newtext.Replace("ğ", "g"); 
newtext = newtext.Replace("ö", "o"); 
newtext = newtext.Replace("ş", "s"); 

Нет необходимости для выключателя/корпуса/индексации сумасшествия.

1

Возможно, он не работает, потому что вы пытаетесь напрямую сопоставить символ. Мой метод работает, и я использовал коды Юникода для соответствия специальным символам, используя этот unicode chart. Вам не нужно перебирать каждый символ, потому что Replace() заменяет все экземпляров этого символа.

public string UrlCorrection(string text) 
{ 
    text = text.ToLower().Trim(); 
    text = text 
     .Replace('\u00E7','c') 
     .Replace('\u0131','i') 
     .Replace('\u00FC','u') 
     .Replace('\u011F','g') 
     .Replace('\u00F6','o') 
     .Replace('\u015F','s'); 

    return text; 
} 

Я проверил это с вашими особыми символами, и это работает отлично для меня.

0

Похоже, вы исходите из фона C и не считаете, что строки неизменяемы в .net (а также на Java).

Ваша функция может возвращать новую строку со всеми символами, замененными их заменителями, но исходная строка не изменится.

в принципе, вы можете взять версию klausbyskov, но вместо того, чтобы называть его так:

UrlCorrection(url); 

вы должны вызвать, например,

url=UrlCorrection(url); 
Смежные вопросы