Подсчет слов со списком строк [] или строк? - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь подсчитать слова в файле, либо я делаю список строк [] и получаю ошибку при удалении пробелов, либо я делаю обычные строки и получаю сообщение об ошибке в разделе «Разделение строки», также я хочуотобразить три наиболее повторяющихся слова, поэтому мне нужно иметь список всех строк.

Вот код:

//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 голосов
/ 28 мая 2018

Ваш цикл, кажется, не имеет смысла, так как каждый цикл будет делать то же самое:

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(',', ' ', '.', '(', ')');          
0 голосов
/ 28 мая 2018

Для каждой буквы в этом текстовом файле вы добавите все слова.Вам не нужен цикл 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();
...