Comment supprimer des lignes vides dans une chaîne en C #? Je génère des fichiers texte en C # (winforms) et, pour une raison quelconque, des lignes vides. Comment puis-je les supprimer après la génération de la chaîne (à l'aide de StringBuilder et TextWrite ).
Exemple de fichier texte:
THIS IS A LINE
THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!
Merci.
Si vous souhaitez également supprimer les lignes ne contenant que des espaces, utilisez
resultString = Regex.Replace(subjectString, @"^\s+$[\r\n]*", string.Empty, RegexOptions.Multiline);
^\s+$
supprimera tout, de la première à la dernière ligne vide (dans un bloc contigu de lignes vides), y compris les lignes ne contenant que des tabulations ou des espaces.
[\r\n]*
supprimera alors le dernier CRLF (ou simplement LF, ce qui est important car le moteur de regex .NET correspond au $
entre un \r
et un \n
, assez curieusement).
@ Tim Pietzcker - Ne travaille pas pour moi. Je dois changer un peu mais merci!
Ehhh C # Regex .. Je devais le changer à nouveau mais cela fonctionnait bien:
private string RemoveEmptyLines(string lines)
{
return Regex.Replace(lines, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd();
}
Exemple: http://regex101.com/r/vE5mP1/2
Vous pouvez essayer String.Replace("\n\n", "\n");
Essaye ça
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();
}
Sur la base du code d'Evgeny Sobolev, j'ai écrit cette méthode d'extension, qui limite également le dernier saut de ligne (obsolète) à l'aide de TrimEnd (TrimNewLineChars)
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;
}
Si vous êtes comme moi et qu'aucune des lignes ci-dessus ne fonctionne pour vous, j'ai alors cherché une fonction permettant de savoir si une chaîne est vide (et si c'est le cas, vous pouvez la détruire ou la supprimer, comme je l'ai fait)
// if string "myText" is empty then
if (string.IsNullOrEmpty("myText")){
//delete/disable string
}