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
}
这是我的第一个 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
}