我正在尝试使用Scanner逐行读取文件。并将当前行与前一行进行比较,以查看是否存在特定字符串。 但是我得到一个空指针异常。
String previousLine = null;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if(line.contains("Importing") && !previousLine.contains("Importing")) { {
System.out.println(previousLine);
}
previousLine = line;
}
答案 0 :(得分:1)
第一次id certificate_id coach_id
1 2 7
2 3 7
3 2 8
仍然为空,因为它尚未设置。这就是你获得previousLine
的原因。将您的代码更改为以下内容:
NullPointerException
请注意String previousLine = null;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if(previousLine != null && line.contains("Importing") && !previousLine.contains("Importing")) {
System.out.println(previousLine);
}
previousLine = line;
}
中的空检查。这样,第一行被读取而不与if
进行比较(因为未设置)。因此,previousLine
被跳过,执行继续第二行。但是这次前一个已经设定,因此它将再次起作用。
答案 1 :(得分:0)
替换
if(line.contains("Importing") && !previousLine.contains("Importing")) { {
与
if(line.contains("Importing") && previousLine != null && !previousLine.contains("Importing")) { {
当您阅读第一行时,变量previousLine
为空。这就是你获得NPE的原因。您正在从第二行开始为其设置字符串。所以你应该好。顺便说一句,StackOverflow上有一个关于如何解决NPE的非常明确的指导。
答案 2 :(得分:0)
使用空字符串而不是null来初始化previousLine
。
String previousLine = "";