我正在编写代码,以便我阅读当前行和下一行。如果下一行包含一些字符串,我需要删除当前行。
但是当我这样做时,一旦它到达EOF,它就会显示空指针异常。
以下是我的代码。
private static void cleanUpTempFile(File temp) throws IOException {
FileReader fr = new FileReader(temp);
BufferedReader temp_in = new BufferedReader(fr);
String tempStr, tempStr1 = null;
int i = 0;
for (String next, footnotes = temp_in.readLine(); footnotes != null; footnotes = next) {
next = temp_in.readLine();
try {
if (next.contains("pb") && (next != null)) {
tempStr = footnotes;
tempStr1 = tempStr;
tempStr = tempStr1.replace(tempStr1, "");
footnotes = tempStr;
}
} catch (Exception e) {
System.out.println(e);
}
System.out.println(footnotes);
}
temp_in.close();
}
它引发了我的错误,因为当它结束时,当结束时,当前行显示最后一行,next
指向下一行为空。我该怎么办呢。
此外,只要有替换完成,并且创建了空行,是否有办法可以停止创建新行。
我尝试在if
tempStr1 = tempStr;
footnotes = tempStr1.replace("\\s", "");
但这似乎不起作用。
尝试使用以下代码,我的控制台会打印null
。
private static void cleanUpTempFile(File temp) throws IOException {
FileReader fr = new FileReader(temp);
BufferedReader temp_in = new BufferedReader(fr);
String tempStr, tempStr1 = null;
String footnotes;
while ((footnotes = temp_in.readLine()) != null) {
String next;
while ((next = temp_in.readLine()) != null) {
if (next.contains("pb")) {
tempStr = footnotes;
tempStr1 = tempStr;
tempStr = tempStr1.replace(tempStr1, "");
footnotes = tempStr;
}
}
}
System.out.println(footnotes);
temp_in.close();
}
感谢。
答案 0 :(得分:4)
根据Baldurian的建议,您可以使用Scanner#hasNextLine()
:
Scanner input = new Scanner(new File(filename));
String prevLine = input.nextLine();
while(input.hasNextLine())
{
String nextLine = input.nextLine();
//do some stuff
prevLine = nextLine;
}
答案 1 :(得分:0)
除了检查文件是否存在并附加到文件外(如果是这样),您还应该有一个.hasNextLine()条件。