StreamReader不读取回车
本文关键字:回车 读取 StreamReader | 更新日期: 2023-09-27 18:26:35
我必须为正在学习的计算机课程编写一个控制台应用程序。该程序使用StreamReader从文件中读取文本,将字符串拆分为单个单词并将其保存在字符串数组中,然后向后打印单词。
每当文件中出现回车时,文件就会停止读取文本。有人能帮我吗?
这是主程序:
using System;
using System.IO;
using System.Text.RegularExpressions;
namespace Assignment2
{
class Program
{
public String[] chop(String input)
{
input = Regex.Replace(input, @"'s+", " ");
input = input.Trim();
char[] stringSeparators = {' ', ''n', ''r'};
String[] words = input.Split(stringSeparators);
return words;
}
static void Main(string[] args)
{
Program p = new Program();
StreamReader sr = new StreamReader("input.txt");
String line = sr.ReadLine();
String[] splitWords = p.chop(line);
for (int i = 1; i <= splitWords.Length; i++)
{
Console.WriteLine(splitWords[splitWords.Length - i]);
}
Console.ReadLine();
}
}
}
这是文件"input.txt":
This is the file you can use to
provide input to your program and later on open it inside your program to process the input.
您可以使用StreamReader.ReadToEnd
而不是StreamReader.ReadLine
。
// Cange this:
// StreamReader sr = new StreamReader("input.txt");
// String line = sr.ReadLine();
string line;
using (StreamReader sr = new StreamReader("input.txt"))
{
line = sr.ReadToEnd();
}
添加using
块也将确保输入文件正确关闭。
另一种替代方法是使用
string line = File.ReadAllText("input.txt"); // Read the text in one line
ReadLine
从文件中读取单行,并去掉后面的回车符和换行符。
ReadToEnd
将把整个文件作为一个字符串读取,并保留这些字符,从而使chop
方法能够像编写的那样工作。
您只是在读一行。您需要读取所有行,直到文件结束。以下内容应该有效:
String line = String.Empty;
using (StreamReader sr = new StreamReader("input.txt"))
{
while (!sr.EndOfStream)
{
line += sr.ReadLine();
}
}
问题是您正在调用ReadLine()
,它正是这样做的,它读取直到遇到回车(您必须在循环中调用它)。
通常,如果您想使用StreamReader
逐行读取文件,则实现看起来更像这样(来自msdn);
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
string line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
while循环中的条件确保您将一直读取到文件末尾,因为如果没有要读取的内容,ReadLine
将返回null
。
另一种选择是使用File.ReadAllLines(MyPath)
,它将返回一个字符串数组,每个元素是文件中的一行。举一个更完整的例子;
string[] lines = File.ReadAllLines(MyFilePath);
foreach(string line in lines)
{
string[] words = line.Split(' ').Reverse();
Console.WriteLine(String.Join(" ", words));
}
这三行代码的作用如下:;将整个文件读取到字符串数组中,其中每个元素都是一行。在这个数组上循环,在每一行上,我们将其拆分为单词,并颠倒它们的顺序。然后我把所有的单词用空格连在一起,并打印到控制台上。如果你想把整个文件按相反的顺序排列,那么你需要从最后一行开始,而不是从第一行开始,我会把细节留给你。