Wie kann ich Zeichen aus einer Zeichenfolge entfernen? Zum Beispiel : "My name @is ,Wan.;'; Wan"
.
Ich möchte die Zeichen '@', ',', '.', ';', '\''
aus dieser Zeichenfolge entfernen , damit es wird"My name is Wan Wan"
var str = "My name @is ,Wan.;'; Wan";
var charsToRemove = new string[] { "@", ",", ".", ";", "'" };
foreach (var c in charsToRemove)
{
str = str.Replace(c, string.Empty);
}
Ich kann jedoch einen anderen Ansatz vorschlagen, wenn Sie alle Nicht-Buchstaben-Zeichen entfernen möchten
var str = "My name @is ,Wan.;'; Wan";
str = new string((from c in str
where char.IsWhiteSpace(c) || char.IsLetterOrDigit(c)
select c
).ToArray());
Einfach:
quelle
Klingt nach einer idealen Anwendung für RegEx - eine Engine für die schnelle Textmanipulation. In diesem Fall:
quelle
Weniger spezifisch für Ihre Frage ist es möglich, ALLE Satzzeichen aus einer Zeichenfolge (außer Leerzeichen) zu entfernen, indem Sie die zulässigen Zeichen in einem regulären Ausdruck weiß auflisten:
Beachten Sie, dass nach 9 ein Leerzeichen steht, um keine Leerzeichen aus Ihrem Satz zu entfernen. Das dritte Argument ist eine leere Zeichenfolge, die dazu dient, alle Teilzeichenfolgen zu ersetzen, die nicht zum regulären Ausdruck gehören.
quelle
Vergleich verschiedener Vorschläge (sowie Vergleich im Zusammenhang mit Einzelzeichenersetzungen mit verschiedenen Größen und Positionen des Ziels).
In diesem speziellen Fall ist das Aufteilen auf die Ziele und das Verbinden der Ersetzungen (in diesem Fall die leere Zeichenfolge) um mindestens den Faktor 3 am schnellsten. Letztendlich hängt die Leistung von der Anzahl der Ersetzungen ab, in denen sich die Ersetzungen befinden die Quelle und die Größe der Quelle. #ymmv
Ergebnisse
(vollständige Ergebnisse hier )
Testkabelbaum (LinqPad)
(Anmerkung: die
Perf
undVs
sind Timing-Erweiterungen, die ich geschrieben habe )quelle
quelle
Der einfachste Weg wäre zu verwenden
String.Replace
:quelle
Eine weitere einfache Lösung:
quelle
quelle
Eine Zeichenfolge ist nur ein Zeichenarray. Verwenden Sie also Linq, um das Ersetzen durchzuführen (ähnlich wie bei Albin oben, außer dass eine linq enthält-Anweisung zum Ersetzen verwendet wird):
Die erste Zeichenfolge ist die Zeichenfolge, in der Zeichen ersetzt werden sollen, und die zweite Zeichenfolge ist eine einfache Zeichenfolge, die die Zeichen enthält
quelle
Ich könnte das genauso gut hier rauswerfen.
Erstellen Sie eine Erweiterung, um Zeichen aus einer Zeichenfolge zu entfernen:
Und es ist so verwendbar:
Oder einfach so:
quelle
Es scheint, dass der kürzeste Weg darin besteht, LINQ zu kombinieren und
string.Concat
:Siehe die C # -Demo . Beachten Sie, dass dies
string.Concat
eine Verknüpfung zu iststring.Join("", ...)
.Beachten Sie, dass die Verwendung eines regulären Ausdrucks zum Entfernen einzelner bekannter Zeichen weiterhin dynamisch erstellt werden kann, obwohl angenommen wird, dass der reguläre Ausdruck langsamer ist. Hier ist jedoch eine Möglichkeit, einen solchen dynamischen regulären Ausdruck zu erstellen (wobei Sie lediglich eine Zeichenklasse benötigen):
Sehen Sie sich eine andere C # -Demo an . Die Regex wird wie folgt aussehen
[@,\.;']+
(Matching ein oder mehr (+
) aufeinander folgende Vorkommen@
,,
,.
,;
oder'
Zeichen) , wo der Punkt nicht entgangen sein muss, aberRegex.Escape
wird notwendig sein , andere Zeichen zu entkommen , die maskiert werden müssen, wie\
,^
,]
oder-
deren Position innerhalb der Zeichenklasse können Sie nicht vorhersagen.quelle
Hier ist eine Methode, die ich geschrieben habe und die einen etwas anderen Ansatz verfolgt. Anstatt die zu entfernenden Zeichen anzugeben, sage ich meiner Methode, welche Zeichen ich behalten möchte - alle anderen Zeichen werden entfernt.
Im Beispiel des OP möchte er nur alphabetische Zeichen und Leerzeichen behalten. So würde ein Aufruf meiner Methode aussehen ( C # -Demo ):
Hier ist meine Methode:
quelle
Viele gute Antworten hier, hier ist meine Ergänzung zusammen mit mehreren Komponententests, die zum Testen der Korrektheit verwendet werden können. Meine Lösung ähnelt der von @ Rianne oben, verwendet jedoch ein ISet, um die O (1) -Suchzeit für die Ersatzzeichen (und auch) bereitzustellen ähnlich der Linq-Lösung von @Albin Sunnanbo).
NUnit (2.6+) testet hier
quelle
Es ist eine leistungsstarke Methode, die ich normalerweise im selben Fall verwende:
Genießen...
quelle
Old School an Ort und Stelle kopieren / stampfen:
Sie sind sich nicht sicher über die Effizienz anderer Methoden (dh den Overhead aller Funktionsaufrufe und Instanziierungen, die als Nebeneffekt bei der C # -Ausführung auftreten).
quelle
Ich mache es Erweiterungsmethode und mit String-Array denke ich,
string[]
ist nützlicher alschar[]
weil char auch String sein kann:dann können Sie es überall verwenden:
quelle
Ich musste Sonderzeichen aus einer XML-Datei entfernen. So habe ich es gemacht. char.ToString () ist der Held in diesem Code.
quelle
quelle
Ausgehend von den Leistungsdaten von @drzaus finden Sie hier eine Erweiterungsmethode, die den schnellsten Algorithmus verwendet.
Verwendung
quelle