我必须为我正在学习的计算机类(class)编写一个控制台应用程序。该程序使用 StreamReader 从文件中读取文本,将字符串拆分为单个单词并将它们保存在 String 数组中,然后向后打印这些单词。

每当文件中有回车符时,文件就会停止读取文本。有人可以帮我解决这个问题吗?

下面是主程序:

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 方法按写入的方式工作。

关于c# - StreamReader 不读回车,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18086304/

10-13 08:14