it-swarm.com.de

Wie kann ich nur die erste Zeile einer Zeichenfolge erhalten?

beispiel:

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;

Wie bekomme ich nur die erste Zeile von der Zeichenfolge "str" ​​in die Zeichenfolge "firstline"?

19
taito

Angenommen, Ihr String enthält wirklich neue Zeilen (\r und \n), können Sie Folgendes verwenden:

string line1 = str.Split(new [] { '\r', '\n' }).FirstOrDefault()
15
Konrad Kokosa

Anstelle von string.Split würde ich string.Substring und string.IndexOf verwenden, um nur die erste Zeile zu erhalten und unnötigen string[] mit der gesamten Eingabezeichenfolge zu vermeiden.

string firstline = str.Substring(0, str.IndexOf(Environment.NewLine));
51
MarcinJuraszek

.NET hat bereits einen Zeilenleser: StringReader. Dadurch müssen Sie sich keine Gedanken darüber machen, was einen Zeilenumbruch darstellt und ob in der Zeichenfolge Zeilenumbrüche vorhanden sind.

 string first = new StringReader(str).ReadLine();
35
Tim Rogers

String.Split erstellt eine ganze Reihe von Teilzeichenfolgen, was für Ihre Anforderung verschwenderisch ist. Ich würde vorschlagen, einen indexbasierten Ansatz zu verwenden:

int index = str.IndexOfAny(new char[] { '\r', '\n' });
string firstline = index == -1 ? str : str.Substring(0, index);
18
Douglas

Mit LINQ können Sie eine einfache Lösung haben, die den Aufwand für die anfängliche Aufteilung der gesamten Zeichenfolge in eine Sammlung von Zeichenfolgen vermeidet.

string first = new string(str.TakeWhile(c => c != '\n').ToArray());
4
Ferruccio

Eine Erweiterungsmethode könnte dies tun:

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;
    }
}

Nenne es mit:

var firstLine = $"abc{Environment.NewLine}def".FirstLine();
1

Nach neuen Zeilenzeichen aufteilen und auf erstes Element zugreifen.

 string[] test = Regex.Split(str, "[\r\n]+");
 String firstline= test[0];
1
Mudassir Hasan

Einzeilige Lösung:

string firstline = str.Split(new string[] { Environment.NewLine }, 2, StringSplitOptions.RemoveEmptyEntries);

Hier bedeutet das zweite Argument (= 2), dass nach dem Auffinden der ersten Zeile die weitere Aufteilung der Zeile in ein Array nicht mehr erforderlich ist und daher schneller funktioniert.

1

Sie können Regex verwenden:

string line = new Regex(".*").Match.Value;

Standardmäßig ist die Variable Regex nicht mehrzeilig und entspricht daher nur der ersten Zeile. Sie können die Variable Regex in die statische Variable setzen, wenn sie häufig verwendet wird.

static readonly FIRSTLINE_REGEX = new Regex(".*");
0
xmedeko

Erstens ist Ihre Zeichenfolge ungültig. Sie können keine mehrzeilige Zeichenfolge haben, ohne verbtaim string literal zu verwenden.

Sie können String.Split wie die Methode verwenden;

 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]);

Ausgabe wird sein;

Lorem ipsum dolor sit amet,

Hier ein demonstration.

0
Soner Gönül