Як замінити символ у рядку пустим символом у C # .NET


82

У мене є такий рядок:

string val = "123-12-1234";

Як я можу замінити тире, використовуючи порожній рядок у C #.

я маю на увазі val.Replace(char oldChar, newChar);

Що потрібно зайти oldCharі newChar.


9
Чому голос проти? Відповісти на це може бути просте запитання, але це, безумовно, не робить його неправильним? Нові користувачі можуть зневіритися досить швидко ...
Пітер Келлі,

5
Погодьтеся з Пітером Келлі - голосування
Нік


5
Хтось може пояснити, чому це закрили як занадто локалізоване ?
Xeo

Дублікат, так, проти, ні, занадто локалізовано, ні.
Щеня,

Відповіді:


128

Ви можете використовувати різне перевантаження, Replace()яке займає рядок.

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

2
+1 за згадку про те, що альтернативний метод - це "перевантаження"
Нік,

Спробуйте замінити символ \ 0, використовуючи вищевказане перевантаження, і це не буде працювати! Символ \ 0 не буде замінено. Це особливо актуально при роботі з рядковими даними, отриманими від пристроїв Snmp
Стів Джонсон

1
Причина, чому перевантаження char до char заміна не буде працювати тут - Чому немає Char.Empty, як String.Empty?
RBT

Я мав змінну замість "-" вище і використовував charToReplace.ToString () на її місці.
Zonus

46

Оскільки інші відповіді тут, хоч і правильні, явно не стосуються ваших початкових сумнівів, я зроблю це.

Якщо ви зателефонуєте, string.Replace(char oldChar, char newChar)це замінить входження символу на інший символ. Це індивідуальна заміна. Через це довжина отриманого рядка буде однаковою.

Ви хочете видалити тире, що, очевидно, не те саме, що замінити їх іншим символом. Ви не можете замінити його "без символу", оскільки 1 символ завжди є 1 символом. Ось чому вам потрібно використовувати перевантаження, яке приймає рядки: рядки можуть мати різну довжину. Якщо ви заміните рядок довжиною 1 на рядок довжиною 0, це призведе до того, що дефіси зникнуть, замінивши їх на "нічого".


3
Дякуємо за детальне пояснення.
SaiBand

1
Зрештою, ви не демонстрували. : P Ну добре. Все одно +1 для пояснення
cHao

1
Ви можете знайти більше інформації тут .
Діней




3

Якщо ви хочете замінити символ у рядку порожнім символом, це означає, що ви хочете видалити цей символ із рядка, прочитайте відповідь Р. Мартіньо Фернандеса.

Ось приклад того, як видалити символ із рядка (замінити на "Порожній символ"):

    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);
    }

1

Якщо ви в циклі, скажімо, ви прокручуєте список розділових знаків, які ви хочете видалити, ви можете зробити щось подібне:

      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, "");

1

У мене є латинська версія коду Развана Думітру, тому що ми використовуємо навіть показник мільйона. Поза курсом я використовую подвійну заміну: D

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

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

0

Мене завжди турбувало те, що я не можу використовувати String.Removeметод для позбавлення від екземплярів рядка або символу в рядку, тому я зазвичай додаю методи розширення тез до своєї основи коду:

public static class StringExtensions
{
    public static string Remove(this string str, string toBeRemoved)
    {
        return str.Replace(toBeRemoved, "");
    }

    public static string RemoveChar(this string str, char toBeRemoved)
    {
        return str.Replace(toBeRemoved.ToString(), "");

    }
}

Той, хто бере, charне може використовувати семантику перевантаження, на жаль, оскільки вона вирішить, string.Remove(int startIndex)оскільки вона є "ближча"

Це, звичайно, суто естетика, але мені це подобається ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.