Scanner.skip(“[\ r \ n] +”)没有读取行尾的异常:java.util.NoSuchElementException

时间:2016-09-24 02:56:28

标签: java jpa java.util.scanner

所以我正在尝试使用扫描仪读取csv文件到我的(java)jpa项目,问题是一旦它到达行的末尾,它会读取\ n并且它给了我一个例外,我'尝试使用方法scanner.skip("[\r\n]+"),但即使这样它也无法正常工作。我正在使用scanner.next(),因为我正在使用分隔符,因此在这种情况下,方法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();

错误截图

enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

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

而是因为这将自动整理平台相关的东西,并能够处理文件的结尾。

也可能是因为你还没有真正到达该行的末尾,但是如果不知道你的csv文件中有哪些条目,我就无法告诉你很多

答案 1 :(得分:0)

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