web-dev-qa-db-fra.com

Comment puis-je obtenir uniquement la première ligne d'une chaîne?

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"?

19
taito

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()
15
Konrad Kokosa

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));
51
MarcinJuraszek

.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();
35
Tim Rogers

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);
18
Douglas

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());
4
Ferruccio

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();
1
Niels Peter Gibe

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];
1
Mudassir Hasan

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(".*");
0
xmedeko

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.

0
Soner Gönül