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