阅读txt中的段落。文件,分成句子,并打印到新的TXT。 c#

时间:2018-03-02 21:35:26

标签: c# split readfile

我正在尝试编写c#代码,其中我应该读取txt中的段落。文件,然后拆分所有句子。然后,我应该将所有句子打印成一个新的txt。文件,他们仍然必须有他们所有的时期,并且必须完全一致。例如,如果段落是:这是第一句话。这是第二句话。这是第三句。,然后输出(在新的txt。文件中)应为:

这是第一句话。

这是第二句话。

这是第三句话。

我写了一些代码,这一切似乎都在起作用,除了最后有一条空行我不认为应该在那里,因为我检查了空行。这是我的代码:

  using System;
  using static System.Console;
  using System.IO;

 class Test
{
    public static void Main()
    {

        // Open the text file using a stream reader.
        using (StreamReader sr = new StreamReader("a.txt"))
        {

            // Read the stream to a string, and write the string to the console.
        String line = sr.ReadToEnd();

        string[] sentences = line.Split('.');

        using (StreamWriter newFile = new StreamWriter("b.txt"))

            for (int i = 0; i < sentences.Length; i++)
            {
                if (sentences[i].Length != 0)
                {
                    string outString = sentences[i].Trim() + ".";
                    newFile.WriteLine(outString);
                    WriteLine(outString);


                }
            }

        }

    }
}

我得到的输出是:

这是第一句话。

这是第二句话。

这是第三句话。

[空行]

我不知道为什么我的txt末尾有空格。文件。任何帮助将不胜感激!!!

非常感谢。

2 个答案:

答案 0 :(得分:2)

您是否尝试对此进行调试以查看string[] sentences包含的内容?每个句子都有一个句点,然后你在它上面分裂,这样就会得到一个包含4行的数组:

1这是第一句话 2这是第二句话 3这是第三句话 4

然后你在每个人的末尾添加一个句号,这就是你获得额外句号的原因。

您可以尝试添加string.IsNullOrEmpty检查每个句子以及.Trim()来清理空格。

foreach (string sentence in sentences)
{
   if (!string.IsNullOrEmpty(sentence))
       Console.WriteLine(sentence.Trim() + ".");
}

答案 1 :(得分:0)

据我了解,你想知道:

  1. 为什么句子之间有空格

  2. 为什么最后有两个点

  3. 当您使用方法Split(string str)时,分割中包含空格。如果你看一下你的例子,句子之间实际上有一些空格,所以它不会删除它们。

    关于问题#2,你在每个句子都添加了一个点,因为Split方法消除了它们。示例文件末尾必须有一个空格,如下所示:And this is the third sentence.[space here]。 Split会在数组中放入第三个句子和点后面的空格。当然newFile.WriteLine(sentence + ".");在每个句子的末尾添加一个点,所以它占用了隐藏空间并在其末尾添加了一个点。您可以使用方法yourString.Trim()删除字符串之前和之后的每个空格。