我正在尝试编写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末尾有空格。文件。任何帮助将不胜感激!!!
非常感谢。
答案 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)
据我了解,你想知道:
为什么句子之间有空格
为什么最后有两个点
当您使用方法Split(string str)
时,分割中包含空格。如果你看一下你的例子,句子之间实际上有一些空格,所以它不会删除它们。
关于问题#2,你在每个句子都添加了一个点,因为Split方法消除了它们。示例文件末尾必须有一个空格,如下所示:And this is the third sentence.[space here]
。 Split会在数组中放入第三个句子和点后面的空格。当然newFile.WriteLine(sentence + ".");
在每个句子的末尾添加一个点,所以它占用了隐藏空间并在其末尾添加了一个点。您可以使用方法yourString.Trim()
删除字符串之前和之后的每个空格。