Wie entferne ich leere Zeilen in einem String in C #? Ich generiere einige Textdateien in C # (Winforms) und aus irgendeinem Grund gibt es einige leere Zeilen. Wie kann ich sie entfernen, nachdem der String generiert wurde (mit StringBuilder und TextWrite )?.
Beispieltextdatei:
THIS IS A LINE
THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!
Vielen Dank.
Wenn Sie auch Zeilen entfernen möchten, die nur Leerzeichen enthalten, verwenden Sie
resultString = Regex.Replace(subjectString, @"^\s+$[\r\n]*", string.Empty, RegexOptions.Multiline);
^\s+$
entfernt alles von der ersten bis zur letzten leeren Zeile (in einem zusammenhängenden Block leerer Zeilen), einschließlich Zeilen, die nur Tabulatoren oder Leerzeichen enthalten.
[\r\n]*
entfernt dann die letzte CRLF (oder nur LF), was wichtig ist, weil die .NET-Regex-Engine mit dem $
zwischen einem \r
und einem \n
übereinstimmt, und das lustig ist.
@ Tim Pietzcker - Funktioniert nicht für mich. Ich muss ein bisschen ändern, aber thx!
Ehhh C # Regex .. Ich musste es noch einmal ändern, aber das funktioniert gut:
private string RemoveEmptyLines(string lines)
{
return Regex.Replace(lines, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd();
}
Beispiel: http://regex101.com/r/vE5mP1/2
Sie könnten String.Replace("\n\n", "\n");
versuchen
Versuche dies
Regex.Replace(subjectString, @"^\r?\n?$", "", RegexOptions.Multiline);
private static string RemoveEmptyLines(string text)
{
var lines = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var sb = new StringBuilder(text.Length);
foreach (var line in lines)
{
sb.AppendLine(line);
}
return sb.ToString();
}
Basierend auf Evgeny Sobolevs Code habe ich diese Erweiterungsmethode geschrieben, die auch den letzten (veralteten) Zeilenumbruch mit TrimEnd (TrimNewLineChars) abschneidet.
public static class StringExtensions
{
private static readonly char[] TrimNewLineChars = Environment.NewLine.ToCharArray();
public static string RemoveEmptyLines(this string str)
{
if (str == null)
{
return null;
}
var lines = str.Split(TrimNewLineChars, StringSplitOptions.RemoveEmptyEntries);
var stringBuilder = new StringBuilder(str.Length);
foreach (var line in lines)
{
stringBuilder.AppendLine(line);
}
return stringBuilder.ToString().TrimEnd(TrimNewLineChars);
}
}
private string remove_space(string st)
{
String final = "";
char[] b = new char[] { '\r', '\n' };
String[] lines = st.Split(b, StringSplitOptions.RemoveEmptyEntries);
foreach (String s in lines)
{
if (!String.IsNullOrWhiteSpace(s))
{
final += s;
final += Environment.NewLine;
}
}
return final;
}
Wenn Sie wie ich sind und keine der oben genannten Zeilen für Sie funktioniert hat, habe ich nach einer Funktion gesucht, die Ihnen mitteilt, ob eine Zeichenfolge leer ist (und wenn ja, können Sie sie zerstören oder löschen, wie ich es tat).
// if string "myText" is empty then
if (string.IsNullOrEmpty("myText")){
//delete/disable string
}