将java中的当前行和上一行与scanner进行比较

时间:2018-06-01 13:19:14

标签: java

我正在尝试使用Scanner逐行读取文件。并将当前行与前一行进行比较,以查看是否存在特定字符串。 但是我得到一个空指针异常。

String previousLine = null;
while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    if(line.contains("Importing") && !previousLine.contains("Importing")) {  {
        System.out.println(previousLine);
    }
    previousLine = line;
}

3 个答案:

答案 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 = "";