用字符串 [] 或字符串列表计算单词数?
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(',', ' ', '.', '(', ')');
我正在尝试计算文件中的单词数,要么我做一个字符串列表 [] 并在取出空格时出错,要么我做普通字符串并在拆分字符串部分出错,我也是想要显示三个最重复的单词,这就是为什么我需要一个包含所有字符串的列表。
代码如下:
//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(',', ' ', '.', '(', ')');