Как получить конкретную строку из строки в C#?

У меня есть строка в C# и я хотел бы получить текст из определенной строки, скажем, 65. И если в файле не так много строк, я хотел бы получить "". Как это сделать?

7 ответов


быстро и легко, предполагая, что \r\n или \n-ваша последовательность новой строки

string GetLine(string text, int lineNo)
{
  string[] lines = text.Replace("\r","").Split('\n');
  return lines.Length >= lineNo ? lines[lineNo-1] : null;
}

private static string ReadLine(string text, int lineNumber)
{
    var reader = new StringReader(text);

    string line;
    int currentLineNumber = 0;

    do
    {
        currentLineNumber += 1;
        line = reader.ReadLine();
    }
    while (line != null && currentLineNumber < lineNumber);

    return (currentLineNumber == lineNumber) ? line :
                                               string.Empty;
}

вы могли бы использовать System.IO.StringReader над строкой. Тогда вы могли бы использовать ReadLine() пока вы не пришли к строке, которую вы хотели или не закончились строки.

поскольку все линии могут иметь разную длину, нет ярлыка, чтобы перейти непосредственно к строке 65.

когда вы Split() строка, которую вы дублируете, что также удвоит потребление памяти.


Если у вас уже есть экземпляр string, вы можете использовать String.Split разделить каждую строку и проверить, доступна ли строка 65, и если да, используйте ее.

если содержимое находится в файле use File.ReadAllLines чтобы получить массив строк, а затем сделать ту же проверку, упомянутую ранее. Это будет хорошо работать для небольших файлов, если ваш файл большой рассмотреть чтение одной строки за раз.

using (var reader = new StreamReader(File.OpenRead("example.txt")))
{
    reader.ReadLine();
}

что вы можете сделать, это разбить строку на основе строки символов.

string[] strLines = yourString.split(Environment.NewLine);
if(strLines.Length > lineNumber)
{
    return strLines[lineNumber];
}

кроме использования определенной файловой структуры и файловых операций более низкого уровня, я не думаю, что есть более быстрый способ, чем прочитать 64 строки, отбросить их, а затем прочитать 65-ю строку и сохранить ее. На каждом шаге вы можете легко проверить, прочитали ли вы весь файл.


theString. Split("\n".ToCharArray())[64]