如何在Java中执行包含相同条件的2 While循环?

如何在Java中执行包含相同条件的2 While循环?,java,if-statement,while-loop,opencsv,Java,If Statement,While Loop,Opencsv,我正在使用JavaOpenCSV库读写一个新文件。要求在每行末尾(最后一行除外)写一个@符号。 我成功地在每行后面添加了@,但最后一行不能包含@。我的Java程序的一部分如下所示: // A part of my Java code String[] endOfLine; String[] nextLine; int endLine = 0; int lineNumber = 0; // To get how many line are in the input file while ((en

我正在使用JavaOpenCSV库读写一个新文件。要求在每行末尾(最后一行除外)写一个
@
符号。 我成功地在每行后面添加了
@
,但最后一行不能包含
@
。我的Java程序的一部分如下所示:

// A part of my Java code
String[] endOfLine;
String[] nextLine;
int endLine = 0;
int lineNumber = 0;

// To get how many line are in the input file
while ((endOfLine = reader.readNext()) != null) {
    endLine++;
}

//For 8 lines endLine is 8 here - which is ok
//Now I want to pass this in next while loop - which is also ok

while ((nextLine = reader.readNext()) != null) {
    lineNumber++;
    channel_temp = nextLine[5];

    if (lineNumber == endLine) {

        //Build a new string with all our required data
        String newdata = channel_temp;
        writer.writeNext(newdata);
        System.out.println(newdata);
    }

    else {

         String newdata2 = channel_temp + "@";
         writer.writeNext(newdata2);
         System.out.println(newdata2);
    }
}

System.out.println("lineNumber: " + lineNumber);
System.out.println("endLine: " + endLine);
程序将输出显示为:

lineNumber: 0
endLine: 8
那么,为什么我的
while循环
没有更新行号值?
在哪一部分我错了?

您需要再次初始化
读卡器。在第一个循环之后,它位于文件的末尾。因此,在第二个循环中,reader.readNext()返回null,因此它永远不会进入第二个循环。

在第一个循环中,您正在读取整个文件。在第二个while循环中,您尝试使用相同的读取器再次读取相同的文件,但该读取器已经位于文件的末尾,因此您的the nextLine()调用将返回null。所以我打赌第二个while循环不会执行

要解决这个问题,您可以在一个while循环中执行所有操作,也可以在第二个循环中重新打开文件


我希望这能有所帮助:)

问题是您使用的是同一个读卡器来执行第二次while循环


考虑再次初始化读卡器。然后,第二个while循环将从头开始。

谢谢您的回复。我理解这个问题。重新打开文件不是一个好主意,但如何在第二个while循环之前重新初始化读取器?我认为没有办法在不重新打开文件的情况下重新初始化读取器。如果您不想重新打开文件,那么最有效的方法可能是合并到两个循环中。谢谢。如果我创建另一个reader实例,然后在第二个while循环中调用它,它对我来说是有效的。一开始我试着在一个while循环中完成,但是我找不到正确的方法。有谁能想出更好的办法吗?如果我在一个while循环中完成,我可能会让while循环落后一步,处理while循环之外的最后一行。但也许其他人有更好的方法来实现这一点。另一个reader实例与再次打开文件相同。您可以使用do while循环来合并这两个循环。nextLine=reader.readNext()将位于循环内。你的情况下一行就好了=无效的