it-swarm.com.de

Wie entferne ich neue Zeilenzeichen aus einem String?

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.

130
Ashish Ashu

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.

241
Kirk

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();
}
61
jason

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();
13
cdhowie

mach das einfach 

s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
3
Mahmoud ElMansy

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'));
3
w.b

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]", "");
0
Kang Andrew

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

0
kalitsov