用字符串 [] 或字符串列表计算单词数?

Counting Words with a list of string[] or string?

我正在尝试计算文件中的单词数,要么我做一个字符串列表 [] 并在取出空格时出错,要么我做普通字符串并在拆分字符串部分出错,我也是想要显示三个最重复的单词,这就是为什么我需要一个包含所有字符串的列表。

代码如下:

//Reading File

var path = @"D:\Projects\C sharp Course\Working_with_Files\Working_with_Files_1\Text.txt";
List<string> list = new List<string>();
var content = File.ReadAllText(path);
var text = content.Trim();
string[] splitted;

//Splitting String

for (int i = 0; i < text.Length; i++)
{

    splitted = text.Split(',', ' ', '.', '(', ')');          
    list.Add(splitted);
}

//Taking out Whitespaces

for (int i = 0; i < list.Count; i++)
{
    if (string.IsNullOrWhiteSpace(list[i]))
    {
        list.RemoveAt(i);
    }
}

对于该文本文件中的每个字母,您将添加所有单词。你不需要 for 循环。您也不需要第二个循环,因为 String.Split 有一个重载:

char[] splitChars = {',', ' ', '.', '(', ')'};
string[] splitted = text.Split(splitChars, StringSplitOptions.RemoveEmptyEntries); 

获取三个最重复单词的子任务:

string[] top3RepeatingWords = splitted   
   .Groupby(w => w)
   .OrderByDescending(g => g.Count())
   .Select(g => g.Key)
   .Take(3)
   .ToArray();

你的循环似乎没有意义,因为每个循环都会做同样的事情:

for (int i = 0; i < text.Length; i++)//You do not use this i!
{
    splitted = text.Split(',', ' ', '.', '(', ')');          
    list.Add(splitted);//Will add the same splitted text each time.
}

我认为您可以删除循环,因为拆分已经拆分了您的整个文本。

string[] splitted = text.Split(',', ' ', '.', '(', ')');