While with Buffered reader 中的两个条件

Two conditions in While with Buffered reader

这是我的第一个 post。我是 Java 的初学者。

我正在尝试使用 BufferedReader 读取文本文件。我想要做的是,它应该只读取以 'U' 开头的行(我想忽略以“#”开头的行)。

    String line = "";

    // reader is BufferedReader
    while (((line = reader.readLine()) != null) && (line.charAt(0) == 'U')) { // make sure only lines starting with 'U' are read
        Variant variant = new Variant(line);
        variants.add(variant); // list of Variant objects
    }

当我执行这个时,我得到一个空列表作为输出。

但是当我尝试这个时,

    String line = "";

    // reader is BufferedReader
    while (((line = reader.readLine()) != null) ) { // make sure only lines starting with 'U' are read
        System.out.println("Char at 0: " + line.charAt(0));
        Variant variant = new Variant(line);
        variants.add(variant); // list of Variant objects
    }

果然,它在屏幕上打印了 'U',但我也得到了不以 'U' 开头的行作为输出。

为什么会这样?是因为我试图为 'line' 分配一些值并根据同一表达式中的某些条件检查它吗?

不要尝试将 所有 逻辑放入您的 while 条件中。此外,您可以使用 String.startsWith(String)(如果您真的愿意,也可以使用 charAt(0));但类似

String line;
// reader is BufferedReader
while (((line = reader.readLine()) != null)) {
    if (line.startsWith("#")) {
        continue;
    } else if (line.startsWith("U")) {
        Variant variant = new Variant(line);
        variants.add(variant); // list of Variant objects
    }
}

String line;
// reader is BufferedReader
while (((line = reader.readLine()) != null)) {
    if (line.startsWith("U")) {
        Variant variant = new Variant(line);
        variants.add(variant); // list of Variant objects
    }
}

当您检查一行的第一个字符时,如果它不是 'U',则 while 循环的条件为假,因此您的程序看不到其他行,您可以这样做相反:

String line = "";
// reader is BufferedReader
while ((line = reader.readLine()) != null) {
    if(line.charAt(0) != 'U') continue;
    Variant variant = new Variant(line);
    variants.add(variant); // list of Variant objects
}