Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scanner.skip(“[\r\n]+”)不读取行尾异常:java.util.NoSuchElementException_Java_Jpa_Java.util.scanner - Fatal编程技术网

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

Scanner.skip(“[\r\n]+”)不读取行尾异常:java.util.NoSuchElementException,java,jpa,java.util.scanner,Java,Jpa,Java.util.scanner,因此,我尝试使用scanner将csv文件读取到我的javajpa项目中,问题是,一旦它到达行的末尾,它将读取\n,并给出一个异常,我尝试使用scanner.skip[\r\n]+方法,但即使这样,它也无法正常工作。我使用的是scanner.next,因为我使用的是Delimiter,所以在这种情况下,nextLine方法对我没有帮助。有人能帮我吗 Scanner sc = new Scanner (new File(loq)).useDelimiter(";"); pote = sc.next

因此,我尝试使用scanner将csv文件读取到我的javajpa项目中,问题是,一旦它到达行的末尾,它将读取\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文件中实际有哪些条目,我就不能告诉你太多了。

我得到了答案,在最后一个字符串中,我只使用下一行而不是下一行。

不管它是什么,它肯定不是“真的吗?”?我想说的是,我用delimeter读取csv文件,一旦它到达要读取的lets字符串,它将读取下一行的最后一个字符串和第一个字符串,全部作为一个字符串。这就是为什么我尝试使用Skip方法…你给了我们很多代码。尽可能少地理解问题。从我发布的示例代码中,您可以忽略“system.out.println”它们只是用于调试其余的是方法,我不能取出任何其他内容,否则就没有意义了。这是文件的内容:35;2.questao1;resposta;反应器2;反应器3;rcorreta有5行,上面有相同的内容,但一旦到达最后一列,它就会显示为“rcorreta35”,因为分隔符是“;”所以“rcorreta”和数字“35”介于两个“;”。。。你明白了吗?这就是为什么我尝试使用skip方法。。