我想知道是否有人能在我的程序中帮助解决这个NoSuchElements异常,该程序扫描一个非常大的文本,然后添加到ArrayList中。
我试过重新排列代码的顺序,看它是否能修复它,但现在我不知道如何修复它。
例外情况本身:
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类:
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万行的话,我可能会收到报告。)
发布于 2020-01-03 03:56:48
请用scan1.hasNext()代替scan1.hasNextLine()查询
while (scan1.hasNext()) {
scan1.next();
String data = scan1.next() + " " + scan1.next();
bigBoi.add(data);
}发布于 2020-01-03 04:43:37
LargeDataSet.txt的末尾有一个空行,这对于scan1.hasNextLine()检查是有效的,但是scan1.next()抛出NoSuchElementException,因为没有什么可读的。
按照接受的答案中的建议,将验证更改为scan1.hasNext()可以解决这个问题,但如果任何行上的条目少于3个,并且接受多于3个条目的行,程序仍然会崩溃。
一个更好的做法是验证所有外部提供的数据:
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]);
}https://stackoverflow.com/questions/59572917
复制相似问题