使用缓冲读卡器时的两个条件

时间:2017-01-21 16:02:50

标签: java while-loop bufferedreader

这是我的第一篇文章。我是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'分配一些值并在同一个表达式中针对某些条件进行检查?

2 个答案:

答案 0 :(得分:1)

请勿尝试在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
    }
}

答案 1 :(得分:1)

当您检查某一行的第一个字符时,如果它不是' 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
}