Ich habe eine Zeichenfolge im folgenden Format
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'
Ich möchte alle Vorkommen von \n
und \r
aus der obigen Zeichenfolge entfernen.
Ich habe string s = s.Trim(new char[] {'\n', '\r'});
versucht, aber es hat nicht geholfen.
Ich benutze gerne reguläre Ausdrücke. In diesem Fall könnten Sie Folgendes tun:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
Reguläre Ausdrücke sind in der .NET-Welt nicht so beliebt wie in dynamischen Sprachen, sie bieten jedoch eine große Menge an Möglichkeiten, Zeichenfolgen zu bearbeiten.
Sie möchten String.Replace
verwenden, um ein Zeichen zu entfernen.
s = s.Replace("\n", String.Empty);
s = s.Replace("\r", String.Empty);
s = s.Replace("\t", String.Empty);
Beachten Sie, dass String.Trim(params char[] trimChars)
nur führende und nachgestellte Zeichen in trimChars
aus der Instanz entfernt, die am aufgerufen wird.
Sie können eine Erweiterungsmethode erstellen, die die Leistungsprobleme der oben genannten Erstellung temporärer Zeichenfolgen vermeidet:
static string RemoveChars(this string s, params char[] removeChars) {
Contract.Requires<ArgumentNullException>(s != null);
Contract.Requires<ArgumentNullException>(removeChars != null);
var sb = new StringBuilder(s.Length);
foreach(char c in s) {
if(!removeChars.Contains(c)) {
sb.Append(c);
}
}
return sb.ToString();
}
Ich weiß, dass dies ein alter Beitrag ist, aber ich dachte, ich würde die Methode teilen, mit der ich neue Zeilenzeichen entferne.
s.Replace(Environment.NewLine, "");
Verweise:
MSDN String.Replace-Methode und MSDN Environment.NewLine-Eigenschaft
Wenn Geschwindigkeit und geringer Speicherverbrauch wichtig sind, gehen Sie folgendermaßen vor:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
mach das einfach
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
Ein LINQ-Ansatz:
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'";
string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t'));
Nun ... Ich möchte, dass Sie spezifischere Bereiche des Raums verstehen. \t
ist eigentlich als horizontaler Raum und nicht als vertikaler Raum sortiert. (Testen Sie das Einfügen von \t
in den Editor)
Wenn Sie Java verwenden, verwenden Sie einfach \v
. Siehe die Referenz unten.
\h
- Ein horizontales Leerzeichen:
[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\v
- Ein vertikales Leerzeichen:
[\n\x0B\f\r\x85\u2028\u2029]
Mir ist jedoch bewusst, dass Sie .NET verwenden. Also ist meine Antwort auf jeden vertikalen Raum zu ersetzen ..
string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");
Die richtige Wahl hängt wirklich davon ab, wie groß die Eingabezeichenfolge ist und wie viel Leistung und Speicher benötigt werden. Ich würde jedoch einen regulären Ausdruck verwenden
string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);
Oder wenn wir denselben Ersatz mehrmals anwenden müssen, ist es besser, eine kompilierte Version für die Regex-Version zu verwenden
var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled);
string result = regex.Replace(s, String.Empty);
HINWEIS: Verschiedene Szenarien erfordern unterschiedliche Ansätze, um die beste Leistung und den minimalen Speicherverbrauch zu erzielen