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

时间:2018-05-28 15:03:58

标签: c# string counting words

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

继承守则:

//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);
    }
}

2 个答案:

答案 0 :(得分:2)

对于该文本文件中的每个字母,您将添加所有单词。你不需要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();

答案 1 :(得分:1)

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

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.
}

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

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