c# - 逐行浏览某些文本时令人困惑的索引错误

标签 c# error-handling indexing

我正在逐行阅读一些文本,我想标记单词并创建1克和2克,但是我认为我的索引存在问题,因为我要么得到索引错误,要么就是我会说我要在字典中修改的项目不存在,这很奇怪,因为我写了代码来首先制作字典项目,如果已​​经存在,要增加一个计数器。
基本上,我的字典的形式为(n-gram字符串,频率int)

   System.IO.StreamReader lines = new System.IO.StreamReader("myfile");
    while (true)
    {
        string line = lines.ReadLine().ToLower();
        if (line == null) break;
        if (line.Trim().Length == 0) continue;
        string[] tokens = Regex.Split(line, "[^\\w']+");
        for (int i = 0; i < tokens.Count()-1; i++)
        {
            try
            {
                one_gram.Add(tokens[i], 1);
                two_gram.Add(tokens[i] + " " + tokens[i + 1], 1);
            }
            catch
            {
                one_gram[tokens[i]]++;
                two_gram[tokens[i] + " "+tokens[i + 1]]++;
            }

        }

    }

谁能看一下我的代码并告诉我哪里出了问题?问题似乎发生在第一行的for循环的末尾,但是如果我这样做
for(int i=0;i<tokens.Count()-3;i++)

然后错误发生在第二行...但是我不确定是什么原因引起的。

编辑:根据建议,我尝试使用ContainsKey方法,但在第一行末尾仍然出现错误,说我正在添加一个已经存在的键,即使if语句应该捕获该键也是如此!
for (int i = 0; i < tokens.Count()-1; i++)
{
    if (one_gram.ContainsKey(tokens[i]))
    {
        one_gram[tokens[i]]++;
    }
    if (two_gram.ContainsKey(tokens[i] + " " + tokens[i + 1]))
    {
        two_gram[tokens[i] + " " + tokens[i + 1]]++;
    }
    one_gram.Add(tokens[i], 1);
    two_gram.Add(tokens[i] + " " + tokens[i + 1], 1);
}

最佳答案

您需要使用else(或break):

for (int i = 0; i < tokens.Count() - 1; i++)
{
    // Save yourself typing errors by creating variables to hold 
    // the key values and then you can just use the variable name
    var oneGramKey = tokens[i];
    var twoGramKey = string.Format("{0} {1}", tokens[i], tokens[i + 1]);

    if (one_gram.ContainsKey(oneGramKey))
    {
        one_gram[oneGramKey]++;
    }
    else
    {
        one_gram.Add(oneGramKey, 1);
    }

    if (two_gram.ContainsKey(twoGramKey))
    {
        two_gram[twoGramKey]++;
    }
    else
    {
         two_gram.Add(twoGramKey, 1);
    }
}

关于c# - 逐行浏览某些文本时令人困惑的索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084842/

相关文章:

php - PHP导致页面HTTP错误500(内部服务器错误):

javascript - 如何处理webview错误并清除警告?

Python - 划分列表并维护原始索引(递归)

MongoDB 索引建议工具

c# - 哪种是 Asp.Net MVC 4.0 或更高版本中依赖注入(inject)的最佳方法?

c# - 查找SQL数据库中最大的数字,如果不可用返回 '0'

asp.net-mvc - .Net 成员(member)服务提供商没有发现重复的电子邮件

python - 列表索引超出范围(使用 while 循环)

c# - 如何在 C# 中找出并防止死锁

c# - 无法解释错误消息 'async is not valid for this item'