我在 C# 中有一个字符串,想要获取特定行的文本,比如第 65 行。如果文件中没有那么多行,我希望得到一个空字符串。如何实现?
假设 \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()
方法直到你找到想要的行或者字符串已经用完为止。Split()
方法分割一个字符串时,会复制一份相同的字符串,这将使内存消耗翻倍。String.Split
来分割每一行,并检查第65行是否可用,如果可用,则使用它。如果内容在文件中,请使用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];
}
theString.Split("\n".ToCharArray())[64]
除了利用特定文件结构和较低级别的文件操作之外,我认为没有比读取64行、丢弃它们,然后读取第65行并保留它更快的方法了。在每个步骤中,您可以轻松地检查是否已读取整个文件。
text.Replace("\n\r","\n").Replace("\r\n", "\n").Split('\n')
。 - Icemanind