[c#] Entfernen Sie Zeichen aus der C # -Zeichenfolge


Answers

Einfach:

String.Join("", "My name @is ,Wan.;'; Wan".Split('@', ',' ,'.' ,';', '\''));
Question

Wie kann ich Zeichen aus einer Zeichenfolge entfernen? Zum Beispiel: "My name @is ,Wan.;'; Wan" .

Ich möchte die Zeichen '@', ',', '.', ';', '\'' Aus dieser Zeichenfolge entfernen, so dass sie zu "My name is Wan Wan"




new List<string> { "@", ",", ".", ";", "'" }.ForEach(m => str = str.Replace(m, ""));



Ich könnte das genauso gut hier rauswerfen.

Erstellen Sie eine Erweiterung, um Zeichen aus einer Zeichenfolge zu entfernen:

public static string RemoveChars(this string input, params char[] chars)
{
    var sb = new StringBuilder();
    for (int i = 0; i < input.Length; i++)
    {
        if (!chars.Contains(input[i]))
            sb.Append(input[i]);
    }
    return sb.ToString();
}

Und es ist so nutzbar:

string str = "My name @is ,Wan.;'; Wan";
string cleanedUpString = str.RemoveChars('@', ',', '.', ';', '\'');

Oder einfach so:

string str = "My name @is ,Wan.;'; Wan".RemoveChars('@', ',', '.', ';', '\'');



Der einfachste Weg wäre die Verwendung von String.Replace :

String s = string.Replace("StringToReplace", "NewString");



Weniger spezifisch für Ihre Frage, es ist möglich, ALLE Interpunktionszeichen aus einer Zeichenfolge (außer Leerzeichen) zu entfernen, indem Sie die zulässigen Zeichen in einem regulären Ausdruck in weißer Farbe auflisten:

string dirty = "My name @is ,Wan.;'; Wan";

// only space, capital A-Z, lowercase a-z, and digits 0-9 are allowed in the string
string clean = Regex.Replace(dirty, "[^A-Za-z0-9 ]", "");

Beachten Sie, dass hinter dem Wert 9 ein Leerzeichen steht, um Leerzeichen aus dem Satz nicht zu entfernen. Das dritte Argument ist eine leere Zeichenfolge, die dazu dient, alle Teilstrings zu ersetzen, die nicht zum regulären Ausdruck gehören.




Ich mache es Erweiterung Methode und mit String-Array, ich denke, string[] ist sinnvoller als char[] da char auch String sein kann:

public static class Helper
{
    public static string RemoverStrs(this string str, string[] removeStrs)
    {
        foreach (var removeStr in removeStrs)
            str = str.Replace(removeStr, "");
        return str;
    }
}

dann kannst du es überall verwenden:

string myname = "My name @is ,Wan.;'; Wan";
string result = myname.RemoveStrs(new[]{ "@", ",", ".", ";", "\\"});



Es scheint, dass der kürzeste Weg ist, LINQ und string.Concat zu kombinieren:

var input = @"My name @is ,Wan.;'; Wan";
var chrs = new[] {'@', ',', '.', ';', '\''};
var result = string.Concat(input.Where(c => !chrs.Contains(c)));
// => result = "My name is Wan Wan" 

Siehe die C # -Demo . Beachten Sie, dass string.Concat eine Verknüpfung zu string.Join("", ...) .

Beachten Sie, dass die Verwendung einer Regex zum Entfernen einzelner bekannter Zeichen weiterhin dynamisch erstellt werden kann, obwohl angenommen wird, dass Regex langsamer ist. Hier ist jedoch eine Möglichkeit, eine solche dynamische Regex zu erstellen (wo Sie nur eine Zeichenklasse benötigen):

var pattern = $"[{Regex.Escape(new string(chrs))}]+";
var result = Regex.Replace(input, pattern, string.Empty);

Sehen Sie sich eine andere C # -Demo an . Die Regex sieht folgendermaßen aus: [@,\.;']+ (Entspricht einem oder mehreren ( + ) aufeinander folgenden Vorkommen von @ Regex.Escape . , ; Oder ' Zeichen), wobei der Punkt nicht Regex.Escape werden muss, sondern Regex.Escape wird benötigt, um anderen Zeichen zu entgehen, die entkoppelt werden müssen, wie \ , ^ , ] oder - deren Position innerhalb der Charakterklasse nicht vorhergesagt werden kann.




Links



Tags

c# c#   .net .net