C# C-显示字符计数而不计算空格?

C# C-显示字符计数而不计算空格?,c#,richtextbox,C#,Richtextbox,此程序在用户键入时计数并显示字数和字符数。单词计数器工作正常,但如果不计算字符之间的空格,我就无法计算出如何计数字符 private void userTextBox_TextChanged(object sender, EventArgs e) { string userInput = userTextBox.Text; userInput = userInput.Trim(); string[] wordCount = userInput.Split(null);

此程序在用户键入时计数并显示字数和字符数。单词计数器工作正常,但如果不计算字符之间的空格,我就无法计算出如何计数字符

private void userTextBox_TextChanged(object sender, EventArgs e)
{
    string userInput = userTextBox.Text;
    userInput = userInput.Trim();
    string[] wordCount = userInput.Split(null);

    //Here is my error
    string[] charCount = wordCount.Length;

    wordCountOutput.Text = wordCount.Length.ToString();
    charCountOutput.Text = charCount.Length.ToString();
}

您可以使用LINQ计算不带空格的字符数:

int charCount = userInput.Count(c => !Char.IsWhiteSpace(c));
但是,您的代码表明您不知道如何计算单词,所以

替换

string[] charCount = wordCount.Length;


只需将所有空格和新行字符替换为正则表达式:

Regex.Replace(inputString, "[\s\n]", "");

您已经有了每个单词,因此请计算每个单词中的字符数并求和总数:

var charCount = words.Sum(w => w.Length);
注意:您将单词数组存储为“wordCount”-为了语义正确,我在上面的代码片段中将其重命名为“words”。即:

string[] words = userInput.Split(null);

比字数少一个空格,例如,从前有四个单词和三个空格,因此可以计算空格数。然后从输入字符串的长度中减去空格数:

int charCount = userInput.Length - (wordCount.Length - 1);
因为这是一个整数而不是字符串数组,所以在输出结果时不要使用长度:

charCountOutput.Text = charCount.ToString();

既然您的名字是Learning2Code,我想我会给您一个答案,用最不先进的技术修复您最初的尝试:

private void userTextBox_TextChanged(object sender, EventArgs e)
{
    string userInput = userTextBox.Text;
    userInput = userInput.Trim();
    string[] wordCount = userInput.Split(null);

    int charCount = 0;
    foreach (var word in wordCount)
        charCount += word.Length;

    wordCountOutput.Text = wordCount.Length.ToString();
    charCountOutput.Text = charCount.ToString();
}

我几乎不认为正则表达式适合这个任务!更重要的是,你为什么这么认为!提示:不要引入复杂性。作为一名程序员,你的工作就是降低复杂性!我会的,因为我写了这一篇,但没有写另一篇,而你实际上至少给出了一些,试图表达你的观点。总的来说,我肯定喜欢泰森提供的答案。但这取决于输入的文本是什么,需要统计哪些字符。哦,我明白了!这是成功的途径,因为你以前就这样做过。英雄联盟你没听过这个短语吗?你已经用正则表达式解决了一个问题。现在你有两个问题不是我说的,我想你知道。第一行代码工作得很好。我只需要把它从底部移走。谢谢蒂姆
private void userTextBox_TextChanged(object sender, EventArgs e)
{
    string userInput = userTextBox.Text;
    userInput = userInput.Trim();
    string[] wordCount = userInput.Split(null);

    int charCount = 0;
    foreach (var word in wordCount)
        charCount += word.Length;

    wordCountOutput.Text = wordCount.Length.ToString();
    charCountOutput.Text = charCount.ToString();
}