Scanner.skip("[\r\n]+") 未读取行尾异常:java.util.NoSuchElementException

Scanner.skip("[\r\n]+") not reading end of the line exception: java.util.NoSuchElementException

所以我正在尝试使用扫描仪将 csv 文件读取到我的 (java)jpa 项目中,问题是一旦它到达行尾,它会读取 \n 并给出我是个例外,我试过使用 scanner.skip("[\r\n]+") 方法,但即使那样它也不能正常工作。我正在使用 scanner.next(),因为我正在使用 Delimiter,所以在这种情况下 nextLine() 方法对我没有帮助。有人可以帮助我吗?

Scanner sc = new Scanner (new File(loq)).useDelimiter(";");
pote = sc.next();
Questoes quest = new Questoes( ); 
do
{
  EntityManagerFactory quest_factory = Persistence.createEntityManagerFactory("TRM");
  EntityManager entitymanager = quest_factory.createEntityManager( );
  entitymanager.getTransaction( ).begin( );
  //pote = sc.next();
  System.out.println(pote);
  quest.setCategory(Integer.parseInt(pote));
  pote = sc.next();
  System.out.println(pote);
  quest.setlevel(Integer.parseInt(pote));
  pote = sc.next();
  System.out.println(pote);
  quest.setQuestion(pote);
  pote = sc.next();
  System.out.println(pote);
  quest.setR1(pote);
  pote = sc.next();
  System.out.println(pote);
  quest.setR2(pote);
  pote = sc.next();
  System.out.println(pote);
  quest.setR3(pote);
  pote = sc.next();
  System.out.println(pote);
  quest.setCorrect(pote);
  System.out.println("End of line");
  sc.skip("[\r\n]");
  entitymanager.persist( quest );
  entitymanager.getTransaction( ).commit( );
  entitymanager.close( );
  quest_factory.close( );
}
while((pote = sc.next())!= null);
sc.close();

截图错误

不同平台的行尾字符不同。 \r\n 在 Windows 上,\n 在 Linux 上,\r 是 Mac OS 上的默认设置。我不建议明确指定要跳过的行尾字符。尝试

while (scanner.hasNext()) {
    // other code

    if (scanner.hasNextLine())
        scanner.nextLine();
}

相反,因为这会自动整理出与平台相关的内容,并能够处理文件结尾。

也可能是您实际上还没有到达该行的末尾,但如果不知道您的 csv 文件中实际包含哪些条目,我不能告诉您太多信息

我得到了答案,在最后一个字符串中我只是使用 nextLine() 而不是 next()。