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()。
所以我正在尝试使用扫描仪将 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()。