字符串不能正确分割

3

我正在尝试使用以下代码将字符串分割为包含原始单词的字符串[]。

    private string[] ConvertWordsFromFile(String NewFileText)
    {
        char[] delimiterChars = { ' ', ',', '.', ':', '/', '|', '<' , '>','/','@','#','$','%','^','&','*','"','(',')',';'};       
        string[] words = NewFileText.Split(delimiterChars);
        return words;


    }

我将使用这个代码将单词添加到字典中,并保持单词键和它们的频率值。所有其他重复的单词都不会被添加为键,只有值会受影响。然而,最后一个单词被视为不同的单词,因此会成为一个新键。我该怎么解决这个问题?
以下是我用于向字典添加单词的代码:
public void AddWord(String newWord)
    {
       newWord = newWord.ToLower();
        try
        {
            MyWords.Add(newWord, 1);
        }
        catch (ArgumentException)
        {
            MyWords[newWord]++;
        }

    }

为了澄清我的问题,即使字符串末尾的单词是重复的,它仍然被视为一个新单词,因此是一个新字符串。

5
如果想让我们了解可能发生了什么,你需要向我们展示输入和输出数据。 - Simon Whitehead
为什么最后一个单词不应该“被视为另一个单词”? - Blorgbeard
我认为你需要展示构建这个字典的代码。 - Blorgbeard
2个回答

6

随机猜测-末尾的空格会生成意外的空单词。如果是这样,请使用Split的正确选项:

var words = newFileText.Split(delimiterChars,
   StringSplitOptions.RemoveEmptyEntries);

2

使用Split方法不是实现你想要的功能的最佳选择,因为你最终会遇到这种问题,并且还需要指定所有的分隔符等。

一种更好的选择是使用正则表达式来替代你的ConvertWordsFromFile方法,如下所示:

Regex.Split(theTextToBeSplitted, @"\W+")

这行代码将返回一个包含所有“单词”的数组。一旦你得到了这个数组,下一步应该是创建你的字典。如果你的代码中可以使用linq,那么实现你想要的最简单和最干净的方法就是这样:

var theTextToBeSplitted = "#Hi, this is a 'little' test: <I hope it is useful>";
var myDictionary = Regex.Split(theTextToBeSplitted, @"\W+")
                        .GroupBy(x => x)
                        .ToDictionary(x => x.Key, x => x.Count());

这就是你需要的全部内容。

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接