Mise à jour : Voir ici pour une solution alternative/asynchrone.
Cela fonctionne très bien et est plus rapide que Regex :
input.Split(new[] {"\r\n", "\r", "\n"}, StringSplitOptions.None)
Il est important d'avoir "\r\n"
en premier dans le tableau pour qu'il soit considéré comme un saut de ligne. Ce qui précède donne les mêmes résultats que l'une ou l'autre de ces solutions Regex :
Regex.Split(input, "\r\n|\r|\n")
Regex.Split(input, "\r?\n|\r")
Sauf que Regex s'avère être environ 10 fois plus lent. Voici mon test :
Action<Action> measure = (Action func) => {
var start = DateTime.Now;
for (int i = 0; i < 100000; i++) {
func();
}
var duration = DateTime.Now - start;
Console.WriteLine(duration);
};
var input = "";
for (int i = 0; i < 100; i++)
{
input += "1 \r2\r\n3\n4\n\r5 \r\n\r\n 6\r7\r 8\r\n";
}
measure(() =>
input.Split(new[] {"\r\n", "\r", "\n"}, StringSplitOptions.None)
);
measure(() =>
Regex.Split(input, "\r\n|\r|\n")
);
measure(() =>
Regex.Split(input, "\r?\n|\r")
);
Sortie :
00:00:03.8527616
00:00:31.8017726
00:00:32.5557128
et voici le Méthode d'extension :
public static class StringExtensionMethods
{
public static IEnumerable<string> GetLines(this string str, bool removeEmptyLines = false)
{
return str.Split(new[] { "\r\n", "\r", "\n" },
removeEmptyLines ? StringSplitOptions.RemoveEmptyEntries : StringSplitOptions.None);
}
}
Utilisation :
input.GetLines() // keeps empty lines
input.GetLines(true) // removes empty lines
0 votes
stackoverflow.com/questions/3989816/
1 votes
J'aime cette solution, mais je ne sais pas comment la rendre plus facile. Le deuxième paramètre supprime les vides, bien sûr.
0 votes
Duplicata possible de Le moyen le plus simple de séparer une chaîne de caractères sur les nouvelles lignes en .NET ?