exemple:
string str = "Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.";
string firstline;
Comment puis-je obtenir juste la première ligne de la chaîne "str" dans la chaîne "firstline"?
En supposant que votre chaîne contienne réellement de nouvelles lignes (\r
et \n
), vous pouvez utiliser:
string line1 = str.Split(new [] { '\r', '\n' }).FirstOrDefault()
Au lieu de string.Split
, je voudrais utiliser string.Substring
et string.IndexOf
pour obtenir uniquement la première ligne et éviter les string[]
inutiles avec la chaîne de saisie complète.
string firstline = str.Substring(0, str.IndexOf(Environment.NewLine));
.NET a déjà un lecteur de ligne: StringReader
. Cela vous évite de vous demander ce qui constitue un saut de ligne et s'il existe des sauts de ligne dans la chaîne.
string first = new StringReader(str).ReadLine();
String.Split
créera toute une gamme de sous-chaînes, ce qui est une perte de temps pour votre besoin. Je suggérerais d'utiliser une approche basée sur un indice:
int index = str.IndexOfAny(new char[] { '\r', '\n' });
string firstline = index == -1 ? str : str.Substring(0, index);
En utilisant LINQ, vous pouvez avoir une solution simple qui évite la surcharge de scinder initialement la chaîne entière en une collection de chaînes.
string first = new string(str.TakeWhile(c => c != '\n').ToArray());
Une méthode d'extension pourrait le faire:
public static class StringExtension
{
/// <summary>
/// Returns first line in a string or entire string if no linebreaks are included
/// </summary>
/// <param name="str">String value</param>
/// <returns>Returns first line in the string</returns>
public static string FirstLine(this string str)
{
if (string.IsNullOrWhiteSpace(str)) return str;
var newLinePos = str.IndexOf(Environment.NewLine, StringComparison.CurrentCulture);
return newLinePos > 0 ? str.Substring(0, newLinePos) : str;
}
}
Appelez le avec:
var firstLine = $"abc{Environment.NewLine}def".FirstLine();
Diviser par le caractère de nouvelle ligne et accéder au premier élément.
string[] test = Regex.Split(str, "[\r\n]+");
String firstline= test[0];
Vous pouvez utiliser Regex
:
string line = new Regex(".*").Match.Value;
Par défaut, la variable Regex
n'est pas multiligne et ne correspond donc qu'à la première ligne. Vous pouvez mettre la Regex
dans la variable statique si elle est utilisée souvent, elle est thread-safe:
static readonly FIRSTLINE_REGEX = new Regex(".*");
Tout d'abord, votre chaîne n'est pas valide. Vous ne pouvez pas avoir une chaîne multi-ligne sans utiliser ( verbtaim chaîne littérale .
Vous pouvez utiliser la méthode String.Split
comme;
string str = @"Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.";
var array = str.Split('\n');
Console.WriteLine(array[0]);
La sortie sera;
Lorem ipsum dolor sit amet,
Voici un demonstration
.