Как заменить символ в строке пустым символом в C#.NET


у меня есть строка, как это:

string val = "123-12-1234";

как я могу заменить тире, используя пустую строку в C#.

Я имею в виду val.Replace(char oldChar, newChar);

что нужно сделать oldChar и newChar.

8   51  

8 ответов:

Вы можете использовать другую перегрузку Replace(), который принимает строку.

val = val.Replace("-", string.Empty)

поскольку другие ответы здесь, хотя и правильные, явно не затрагивают ваши первоначальные сомнения, я это сделаю.

Если вы называете string.Replace(char oldChar, char newChar) Он заменит вхождения символа другим символом. Это замена один-на-один. Из-за этого длина результирующей строки будет одинаковой.

то, что вы хотите, это удалить тире, что, очевидно, не то же самое, что замена их другим символом. Нельзя замените его на "нет символа", потому что 1 символ всегда 1 символ. Вот почему вы должны использовать перегрузку, которая принимает строки: строки могут иметь разную длину. Если вы замените строку длины 1 на строку длины 0, эффект заключается в том, что тире исчезли, заменив "ничего".

Это кажется слишком простым, но:

val.Replace("-","");
val.Replace("-", "");

источник MSDN

string val = "123-12-1234";

val = val.Replace("-", ""); // result: 123121234

Если вы находитесь в цикле, предположим, что вы просматриваете список знаков препинания, которые вы хотите удалить, вы можете сделать что-то вроде этого:

      private const string PunctuationChars = ".,!?$";
          foreach (var word in words)
                {
                    var word_modified = word;

                    var modified = false;

                    foreach (var punctuationChar in PunctuationChars)
                    {
                        if (word.IndexOf(punctuationChar) > 0)
                        {
                            modified = true;
                            word_modified = word_modified.Replace("" + punctuationChar, "");


                        }
                    }
               //////////MORE CODE
               }

трюк заключается в следующем:

word_modified.Replace("" + punctuationChar, "");

Если вы хотите заменить символ в строке пустым символом, что означает, что вы хотите удалить этот символ из строки, прочитайте ответ Р. Мартиньо Фернандеса.

вот пример как удалить символ из строки (заменить на "пустой символ"):

    public static string RemoveCharFromString(string input, char charItem)
    {
        int indexOfChar = input.IndexOf(charItem);
        if (indexOfChar >= 0)
        {
            input = input.Remove(indexOfChar, 1);
        }
        return input;
    }

или эта версия, которая удаляет все рецидивы символа в строке:

    public static string RemoveCharFromString(string input, char charItem)
    {
        int indexOfChar = input.IndexOf(charItem);
        if (indexOfChar < 0)
        {
            return input;
        }
        return RemoveCharFromString(input.Remove(indexOfChar, 1), charItem);
    }

У меня есть Латинская версия кода Развана Думитру, потому что мы используем индикатор миллиона даже. Конечно, я использую двойную замену: D

public static string CleanNumb(string numb) 
{
    foreach (char c in ".,'´")
       numb = numb.Replace(c, ' ');

    return numb.Replace(" ", "");
}