Java扫描仪的nextLine()方法未找到任何行

时间:2019-09-27 13:48:06

标签: java

我在这个简单的问题上浪费了很多时间,但是我不知道为什么nextLine()无法找到下一行。请帮助我,谢谢!

我尝试了以下代码:https://www.geeksforgeeks.org/scanner-nextline-method-in-java-with-examples/作为实验,很自然它起作用了,但是我自己却没有。

从文件中复制了变量“测试”。

代码部分:

ObservableList adatok;

@Override
public void initialize(URL url, ResourceBundle rb) {

    int lines = 0;
    try {
    File f = new File("C:\\Users\\EDU_BYQN_0965\\Documents\\NetBeansProjects\\JSZ_SB\\src\\jsz_sb\\fokonyvi_kivonat.txt");
    String test = "113,Vagyoni értékű jogok,3600,0,\n" +
            "1173,Vagyoni értékű jogok értékhelyesbítése,360,0,\n" +
            "1193,Vagyoni értékű jogok értékcsökkenése,0,2400,\n" +
            "5,t,5,5,";

    Scanner s = new Scanner(f);
    while (s.hasNext() && s.nextLine() != null) lines++;
    String[][] array = new String[lines][4];
    String[] temporary = new String[4];
    for (int i = 0; i < lines; i++) {
        temporary = s.nextLine().split(",");
        for (int j = 0; j < 4; j++) {
            array[i][j]=temporary[j];
            adatok = FXCollections.observableArrayList(
                    new TrialBalance(array[i][0], array[i][1], Integer.parseInt(array[i][2]), Integer.parseInt(array[i][3])));               
        }            
    }
            } catch (FileNotFoundException ex) {
        Logger.getLogger(FXML_scene2Controller.class.getName()).log(Level.SEVERE, null, ex);
    }

“临时”数组应包含文件的第一行,至少应在第一个循环处,并且不应出现运行时错误。

1 个答案:

答案 0 :(得分:4)

您在此行中用尽了Scanner

while (s.hasNext() && s.nextLine() != null) lines++;

它停止了,因为没有更多的行。 (请注意,支票hasNext()与调用next()配对,而hasNextLine()nextLine()配对)。

因此,如果您尝试从Scanner中读取更多行,则没有更多内容可读取了。

您要么需要创建Scanner的新实例;要么或使用不需要知道先验大小的数据结构,例如List(或根据需要调整数组的大小;但是当{{ 1}}透明地为您做到这一点。