.contains() 不适用于 BufferedReader

.contains() not working with BufferedReader

我正在尝试创建一个程序来检查文件并在行中包含单词“TRUE”时将行打印回给我

这是文件内容

TRUE,TRUE
FALSE,TRUE
FALSE,FALSE
TRUE,FALSE
TRUE,TRUE
TRUE,FALSE

这是程序

public static void main(String[] args) {
    // TODO Auto-generated method stub
    
    BufferedReader reader;
    try {
        reader = new BufferedReader(new FileReader(
                "C:\Users\tree3\Desktop\Programming\file.txt"));
        String line = reader.readLine();
        while (line != null) {
            
            if(line.contains("TRUE")) { 
                System.out.println(line);
                // read next line
                line = reader.readLine();
            } else {
                System.out.println("false");
            }
            
            
        }
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
}

程序只是无限期地打印 false

这是为什么?

public static void main(String[] args) {
    try (BufferedReader reader = new BufferedReader(new FileReader("C:\Users\tree3\Desktop\Programming\file.txt"))) {
        String line = reader.readLine();
        while (line != null) {
            if (line.contains("TRUE")) {
                System.out.println(line);
            } else {
                System.out.println("false");
            }
            // read next line
            line = reader.readLine();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

不要阅读 if 语句中的下一行。如果 if 语句不正确怎么办?你永远不会继续前进并无限期地卡在那条线上。

使用try-with-resources(Java7+)不用担心关闭资源


清洁工(Java 8 岁以上):

try (BufferedReader reader = new BufferedReader(new FileReader("C:\Users\tree3\Desktop\Programming\file.txt"))) {
    reader.lines().forEach(line -> System.out.println(line.contains("TRUE")));
} catch (IOException e) {
    e.printStackTrace();
}