Исправлять символы в строке? - PullRequest
2 голосов
/ 16 сентября 2010

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

«с» вместо «ç» «я» вместо «я» «и» вместо «ü» «г» вместо «ğ» «о» вместо «ё» "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;
    }

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

Ответы [ 4 ]

5 голосов
/ 16 сентября 2010

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

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

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

2 голосов
/ 16 сентября 2010

Сделайте так:

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 ();
}
1 голос
/ 16 сентября 2010

Возможно, это не работает, потому что вы пытаетесь сопоставить символ напрямую. Мой метод работает, и я использовал коды Unicode для соответствия специальным символам, используя эту диаграмму Unicode . Вам не нужно перебирать каждый символ, потому что 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 голосов
/ 16 сентября 2010

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

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

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

UrlCorrection(url);

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

url=UrlCorrection(url);
...