【问题标题】:Java NoSuchElementException using String Tokenizer使用字符串标记器的 Java NoSuchElementException
【发布时间】:2014-02-16 05:43:51
【问题描述】:

我正在读取如下所示的事务文件:

1112, D
4444, A, Smith, Jones, 45000, 2, Shipping
6666, U, Jones
8900, A, Hill, Bill, 65000, 0, Accounting

当我尝试使用“,”标记逐行读取文件时,程序在第一条记录处出现 NoSuchElementException 错误。我已经推断出我正在读取文件的条件导致了这个问题,特别是在下面的 while 循环中。我尝试使用“if”语句并将条件设置为“while (st2.hasMoreTokens)”以及两者的组合,但错误仍然存​​在,我不确定为什么?提前感谢您的任何帮助。这是下面的代码:

Scanner transactionFile = new Scanner (new File(fileName2));

        for (int i = 0; i < T_SIZE; i++) {
            line2[i] = transactionFile.nextLine();

            transaction[i] = new Transaction();

            st2 = new StringTokenizer(line2[i], ", ");

            transaction[i].setEmployeeID(Integer.parseInt(st2.nextToken()));
            transaction[i].setAction(st2.nextToken());

            while ((transaction[i].getAction() != "D")) {
                transaction[i].setLastName(st2.nextToken());
                transaction[i].setFirstName(st2.nextToken());
                transaction[i].setSalary(Integer.parseInt(st2.nextToken()));
                transaction[i].setNumOfDependants(Integer.parseInt(st2.nextToken()));
                transaction[i].setDepartment(st2.nextToken());
            }
        }

【问题讨论】:

  • @SotiriosDelimanolis:不确定这是一个字符串比较问题吗?正如我之前解释的那样,我使用了其他几个条件(即“while (st2.hasMoreTokens)”或“while ((st2.nextToken) != null)”,结果都相同。
  • @user3315213 这种比较 (transaction[i].getAction() != "D") 可能总是返回 true,我认为这就是 Sotirios 评论的意思。您应该将字符串与等号进行比较。
  • 我明白了。虽然我用 "(!(transaction[i].getAction().equals("D")))" 替换了 while 循环条件,但我仍然得到相同的结果。
  • 很抱歉让您回答所有这些问题,但作为程序员,您需要开发的首要技能之一就是调试。提出正确的问题是掌握这项技能的第一步。

标签: java stringtokenizer nosuchelementexception


【解决方案1】:

看看你的while 循环。 Java 中的== 运算符检查两个对象是否相同的引用,这很少是一个值得依赖的好主意,并且可能导致此循环无限循环(或至少直到程序崩溃一个例外)。从逻辑上讲,您想要做的是检查两个字符串是否相等,即都包含字符串"D":

while (!transaction[i].getAction().equals("D"))

【讨论】:

    【解决方案2】:
    str.nextToken() 
    

    函数在调用时访问一个元素并增加它的索引,因此您调用它的次数超过数组中的元素,因此它无法访问更高的索引并抛出 noSuchElementFound 异常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多