首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从输入文件修复NoSuchElementException?

如何从输入文件修复NoSuchElementException?
EN

Stack Overflow用户
提问于 2020-01-03 03:40:56
回答 2查看 544关注 0票数 0

我想知道是否有人能在我的程序中帮助解决这个NoSuchElements异常,该程序扫描一个非常大的文本,然后添加到ArrayList中。

我试过重新排列代码的顺序,看它是否能修复它,但现在我不知道如何修复它。

例外情况本身:

代码语言:javascript
复制
Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1478)
    at mainTest.main(mainTest.java:11)

mainTest类:

代码语言:javascript
复制
import java.io.*;
import java.util.*;

public class mainTest {
    public static void main(String args[]) throws FileNotFoundException {
        ArrayList<String> bigBoi = new ArrayList<>(500000);

        Scanner scan1 = new Scanner(new File("LargeDataSet.txt"));

        while (scan1.hasNextLine()) {
            scan1.next();
            String data = scan1.next() + " " + scan1.next();
            bigBoi.add(data);
        }

        ArrayList<String> successful = new ArrayList<>(500000);
       }
    }

.txt文件的单位:https://drive.google.com/file/d/1MWfMKMhSvuopOt9WwquABgYBTt0M4eLA/view?usp=sharing

(很抱歉需要你从google驱动器下载它,这个文件太长了,如果我粘贴了50万行的话,我可能会收到报告。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-03 03:56:48

请用scan1.hasNext()代替scan1.hasNextLine()查询

代码语言:javascript
复制
while (scan1.hasNext()) {
        scan1.next();
        String data = scan1.next() + " " + scan1.next();
        bigBoi.add(data);
}
票数 1
EN

Stack Overflow用户

发布于 2020-01-03 04:43:37

LargeDataSet.txt的末尾有一个空行,这对于scan1.hasNextLine()检查是有效的,但是scan1.next()抛出NoSuchElementException,因为没有什么可读的。

按照接受的答案中的建议,将验证更改为scan1.hasNext()可以解决这个问题,但如果任何行上的条目少于3个,并且接受多于3个条目的行,程序仍然会崩溃。

一个更好的做法是验证所有外部提供的数据:

代码语言:javascript
复制
while (scan1.hasNextLine()) {
    String line = scan1.nextLine();
    String[] tokens = line.split("\\s+"); //split by space(s)
    if(tokens.length != 3) { //expect exactly 3 elements on each line
        throw new IllegalArgumentException("Invalid line: " + line);
    }
    bigBoi.add(tokens[1] + " " + tokens[2]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59572917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档