【问题标题】:Word count not working when entering new line输入新行时字数不起作用
【发布时间】:2015-06-11 20:49:52
【问题描述】:

我一直在查看其他关于 C# 中字数统计的类似问题的堆栈溢出文章,但对于我遇到的 pickle,没有任何帮助。

我有一个从文本文件输入文本的文本框。我按回车键在文本文件中创建一个新行,将文本分成三行。正文如下:

It's a test to see "if" the
application_for Top Image Systems
actually work. Hopefully it does work.

现在你可以看到应该有 17 个字,但是我的字数只有 15 个。经过一些试验和错误,我意识到问题一定是它在一个新行中。每次换行时,它都认为上一行的最后一个单词和新行的第一个单词一起作为一个单词(或者我认为程序是这样想的)。

我的问题是我下面的代码,我如何才能认识到如果有一个新行,它应该像空格一样分割单词?

下面是我的代码:

string nl = System.Environment.NewLine;

//Missing Code to read text file which I don't need to include in this example

do
{
    textLine = textLine + txtReader.ReadLine();
}

//Read line until there is no more characters
while (txtReader.Peek() != -1);

//seperate certain characters in order to find words
char[] seperator = (" " + nl).ToCharArray();

//number of words
int numberOfWords = textLine.Split(seperator, StringSplitOptions.RemoveEmptyEntries).Length;

【问题讨论】:

    标签: c# split newline


    【解决方案1】:

    txtReader.ReadLine(); 去掉你的换行符。 来自msdn:

    返回的字符串不包含终止回车或换行。

    所以你必须手动添加它(或者只是添加一个空格)

    textLine = textLine + txtReader.ReadLine() + " ";
    

    考虑使用 StringBuilder 类重复连接字符串。

    编辑:

    要像从未添加空格一样获取字符数,请执行以下操作:

    int charCount = textLine.Length - lineCount;
    

    其中lineCount 是一个整数,每次在 do-while 循环中添加空格时递增:

    int lineCount = 0;
    
    do
    {
        textLine = textLine + txtReader.ReadLine();
        lineCount++;
    }
    

    【讨论】:

    • 谢谢,唯一的问题是,如果我进行字符计数,它会在添加到末尾后添加“”。有没有其他不影响字数的方法?我知道的唯一方法是创建两个变量,一个显示您的代码并将其用于字数统计,然后使用我的并将其存储在不同的变量中以进行字符计数
    • 如果你真的不想这样,你可以计算你在 while 循环中读了多少次一行,最后减去那个数字。
    • 非常聪明,是的,问题是它应该是 98 个字符和 17 个单词,我知道你说添加带有平均额外字符的空格是有道理的,但我认为这不是最好的方式。虽然我认为最后的减法方法会起作用。如果你不介意,你能告诉我如何减去吗?
    • 我编辑了我的答案以获取字符数。
    • 非常感谢您的帮助 h3n :)
    【解决方案2】:

    我自己有点初学者,抱歉,如果这不是一个很好的答案,但我刚刚在 c# 中完成了一堆文本内容,我可能会通过替换将出现的换行符来接近作为带有空格的原始字符串中的“\n”或“\r”,“” - 类似于:

    nl = nl.Replace("\r", " ");
    

    【讨论】:

    • 在他做完之后,他的字符串中没有 \r 了。所以不幸的是,你的答案什么也没做。
    • 很好的尝试 :) 我也是一个初学者,所以我们都会通过这个。
    • 为什么有c++经验的人会使用replace来解决这个问题???我想你们俩都可以使用一些帮助,所以使用拆分/修剪组合以获得准确的结果......
    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多