Как я могу получить только первую строку из строки?

Пример:

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;

Как я могу получить только первую строку из строки "str" в строке "firstline"?

Ответ 1

Предполагая, что ваша строка действительно содержит новые строки (\r и \n), вы можете использовать:

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

Ответ 2

Вместо string.Split я использовал бы string.Substring и string.IndexOf, чтобы получить только первую строку и избежать ненужной string[] со всей входной строкой.

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

Ответ 3

У .NET уже есть линейный читатель: StringReader. Это избавляет вас от беспокойства о том, что представляет собой разрыв строки, и есть ли строки в строке.

 string first = new StringReader(str).ReadLine();

Ответ 4

String.Split создаст целый массив подстрок, который является ненужным для вашего требования. Я бы предложил использовать индексный подход:

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

Ответ 5

Используя LINQ, вы можете иметь простое решение, которое позволяет избежать накладных расходов, изначально разбивая всю строку на коллекцию строк.

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

Ответ 6

Разделить новый символ строки и получить доступ к первому элементу.

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

Ответ 7

Метод расширения может сделать это:

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

Позвоните по следующему адресу:

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

Ответ 8

Прежде всего, ваша строка недействительна. У вас не может быть многострочной строки без использования verbtaim строковый литерал.

Вы можете использовать String.Split, например:

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

Выход будет:

Lorem ipsum dolor sit amet,

Здесь demonstration.

Ответ 9

Вы можете использовать Regex:

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

По умолчанию Regex не является многострочным, поэтому он соответствует только первой строке. Вы можете поместить Regex в статическую переменную, если ее использовать часто, она безопасна в потоке:

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

Ответ 10

Однолинейное решение:

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

Здесь второй аргумент (= 2) означает, что после нахождения первой строки разделение строки далее в массив больше не требуется, поэтому он работает быстрее.