如何在C#中获取简单字符串变量中的最后一行
获取内存中多行字符串的最后一行(C#)
很简单的需求,既然你的字符串是存在变量里而非文件中,我给你几个实用的C#方案,完全不需要读文件操作:
方案1:Split分割后取最后一项(简洁直观)
这种写法最容易理解,适合大多数普通长度的字符串:
string mytext = "line1\nline2\nline3"; // 同时处理Unix(\n)、Windows(\r\n)、旧Mac(\r)的换行格式,自动过滤空行 var lastLine = mytext.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Last();
小贴士:加上StringSplitOptions.RemoveEmptyEntries可以避免字符串末尾有换行时返回空字符串的问题。
方案2:LastIndexOf定位截取(性能最优)
如果你的字符串特别长,分割整个字符串会占用较多内存,用这个方法直接定位最后一个换行符的位置,效率更高:
string mytext = "line1\nline2\nline3"; // 找到最后一个换行相关字符的位置 int lastNewLinePos = mytext.LastIndexOfAny(new[] { '\n', '\r' }); // 处理只有一行的情况,同时清理末尾可能残留的换行符 var lastLine = lastNewLinePos == -1 ? mytext : mytext.Substring(lastNewLinePos + 1).TrimEnd('\r', '\n');
方案3:StringReader逐行读取(内存友好)
针对超大型字符串(比如几MB甚至更大),用StringReader逐行读取,不会一次性加载所有行到内存里:
string mytext = "line1\nline2\nline3"; string lastLine = null; using (var reader = new StringReader(mytext)) { string currentLine; // 逐行读取,每次只保留最后一行的引用 while ((currentLine = reader.ReadLine()) != null) { lastLine = currentLine; } } // 循环结束后lastLine就是最后一行内容
内容的提问来源于stack exchange,提问作者Mahyar Esteki
相关产品推荐
相关产品推荐

