So ersetzen Sie ein Zeichen in einer Zeichenfolge durch ein leeres Zeichen in C # .NET

77

Ich habe eine Zeichenfolge wie diese:

string val = "123-12-1234";

Wie kann ich die Bindestriche durch eine leere Zeichenfolge in C # ersetzen?

ich meine val.Replace(char oldChar, newChar);

Was muss rein oldCharund newChar.

SaiBand
quelle
3
string val = "123-12-1234" .Replace ("-", String.Empty); // Hinweis: Bitte versuchen Sie zumindest, ein Problem zu lösen, bevor Sie solche Fragen stellen.
Brandon Moretz
9
Warum das Downvote? Es mag eine einfache Frage sein, aber das macht es sicher nicht falsch? Neue Benutzer können ziemlich schnell entmutigt werden ...
Peter Kelly
5
Stimme zu mit Peter Kelly - Upvoting
Nick
5
Hat jemand etwas dagegen zu erklären, warum dies als zu lokalisiert geschlossen wurde ?
Xeo

Antworten:

126

Sie können eine andere Überladung Replace()dieser Zeichenfolge verwenden.

val = val.Replace("-", string.Empty)
Bala R.
quelle
2
+1 für die Erwähnung, dass die alternative Methode eine "Überlastung" ist
Nick
Versuchen Sie, das Zeichen \ 0 durch die obige Überladung zu ersetzen, und es wird nicht funktionieren! Das Zeichen \ 0 wird nicht ersetzt. Dies gilt insbesondere für die Arbeit mit Zeichenfolgendaten, die von Snmp-Geräten empfangen wurden
Steve Johnson,
1
Der Grund, warum die Überladung von Char zu Char-Ersatz hier nicht funktioniert - Warum gibt es kein Char.Empty wie String.Empty?
RBT
Ich hatte eine Variable anstelle des "-" oben und verwendete stattdessen charToReplace.ToString ().
Zonus
44

Da die anderen Antworten hier, obwohl richtig, Ihre anfänglichen Zweifel nicht explizit ansprechen, werde ich es tun.

Wenn Sie anrufen string.Replace(char oldChar, char newChar) , werden die Vorkommen eines Zeichens durch ein anderes Zeichen ersetzt. Es ist ein Eins-zu-Eins-Ersatz. Aus diesem Grund ist die Länge der resultierenden Zeichenfolge gleich.

Was Sie wollen, ist , die Bindestriche zu entfernen , was natürlich nicht dasselbe ist, als sie durch ein anderes Zeichen zu ersetzen. Sie können es nicht durch "kein Zeichen" ersetzen, da 1 Zeichen immer 1 Zeichen ist. Aus diesem Grund müssen Sie die Überladung verwenden, die Zeichenfolgen benötigt: Zeichenfolgen können unterschiedliche Längen haben. Wenn Sie eine Zeichenfolge der Länge 1 durch eine Zeichenfolge der Länge 0 ersetzen, werden die Striche entfernt und durch "nichts" ersetzt.

R. Martinho Fernandes
quelle
3
Vielen Dank für eine ausführliche Erklärung.
SaiBand
1
Nach all dem hast du nicht demonstriert. : P Na ja. +1 sowieso für die Erklärung
cHao
1
Weitere Informationen finden Sie hier .
Dinei
5

Das scheint zu einfach, aber:

val.Replace("-","");
Richard Dalton
quelle
5
val.Replace("-", "");

MSDN-Quelle

Koeffizient
quelle
4
string val = "123-12-1234";

val = val.Replace("-", ""); // result: 123121234
Tim S. Van Haren
quelle
3

Wenn Sie ein Zeichen in einer Zeichenfolge durch ein leeres Zeichen ersetzen möchten, dh dieses Zeichen aus einer Zeichenfolge entfernen möchten, lesen Sie die Antwort von R. Martinho Fernandes.

Hier ist ein Beispiel, wie Sie ein Zeichen aus einer Zeichenfolge entfernen (durch ein "leeres Zeichen" ersetzen):

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

oder diese Version, die alle Wiederholungen eines Zeichens in einer Zeichenfolge entfernt:

    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);
    }
Alexei Bondarev
quelle
1

Wenn Sie sich in einer Schleife befinden, nehmen wir an, Sie durchlaufen eine Liste von Interpunktionszeichen, die Sie entfernen möchten. Sie können Folgendes tun:

      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
               }

Der Trick ist der folgende:

word_modified.Replace("" + punctuationChar, "");
Razvan Dumitru
quelle
1

Ich habe eine lateinische Version des Codes von Razvan Dumitru, weil wir sogar einen Millionenindikator verwenden. Natürlich benutze ich einen doppelten Ersatz: D.

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

    return numb.Replace(" ", "");
}
Jorge Alejandro Raigoza
quelle