C#:循环多行字符串
在不使用更多内存(例如不将其拆分为数组)的情况下循环遍历多行字符串的每一行的好方法是什么?
What is a good way to loop through each line of a multiline string without using much more memory (for example without splitting it into an array)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
来自 MSDN 的 StringReader
from MSDN for StringReader
尝试使用 String.Split 方法:
Try using String.Split Method:
这是一个快速代码片段,它将查找字符串中的第一个非空行:
Here's a quick code snippet that will find the first non-empty line in a string:
有时我认为我们可以使解决方案变得过于复杂,以避免重复一行代码。这就是我首先提出这个问题的原因。
经过一番思考后,我得出的结论是,最简单的解决方案是在循环之前和内部重复 ReadLine。
我意识到这可能被认为不遵循 DRY 原则,但考虑到简单性,我认为值得考虑。
Sometimes I think we can overcomplicate the solution just to avoid repeating one line of code. This is the reason I landed on this question in the first place.
After thinking about it for a bit I came to the conclusion that the simplest solution is to repeat the
ReadLine
before and inside the loop.I realize this might be considered to not follow the DRY principle, but I think it's worth considering given the simplicity.
您可以使用扩展方法:
You could use an extension method:
我建议结合使用 StringReader 和我的 LineReader 类,该类是 MiscUtil,但也可以在这个 StackOverflow 答案中找到 - 您可以轻松地将该类复制到您自己的实用程序项目中。你可以像这样使用它:
循环遍历字符串数据体(无论是文件还是其他什么)中的所有行是如此常见,以至于它不应该要求调用代码测试 null 等:)话虽如此,如果您确实想要进行手动循环,与 Fredrik 相比,我通常更喜欢这种形式:
这样您只需测试一次无效性,并且不必考虑do/while 循环(由于某种原因,它总是比直接的 while 循环花费更多的精力来阅读)。
I suggest using a combination of
StringReader
and myLineReader
class, which is part of MiscUtil but also available in this StackOverflow answer - you can easily copy just that class into your own utility project. You'd use it like this:Looping over all the lines in a body of string data (whether that's a file or whatever) is so common that it shouldn't require the calling code to be testing for null etc :) Having said that, if you do want to do a manual loop, this is the form that I typically prefer over Fredrik's:
This way you only have to test for nullity once, and you don't have to think about a do/while loop either (which for some reason always takes me more effort to read than a straight while loop).
您可以使用
StringReader
一次读取一行:You can use a
StringReader
to read a line at a time:我知道这个问题已经得到解答,但我想添加我自己的答案:
I know this has been answered, but I'd like to add my own answer: