使用String Tokenizer的Java NoSuchElementException

时间:2014-02-16 05:43:52

标签: java stringtokenizer nosuchelementexception

我正在阅读一个如下所示的交易文件:

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());
            }
        }

2 个答案:

答案 0 :(得分:1)

查看您的while循环。 Java中的==运算符检查两个对象是否相同的引用,这很难依赖,并且可能导致此循环无限循环(或至少在程序之前)崩溃,但有例外)。从逻辑上讲,您要做的是检查两个字符串相等,即两者都包含字符串"D"

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

答案 1 :(得分:0)

str.nextToken() 

函数在调用时访问一个元素并递增它的索引,这样你就可以调用它多于数组中的元素,这样就无法访问更高的索引并抛出noSuchElementFound的异常