我有一个我想阅读的问题文件,在阅读时,我想让它从答案中识别问题并打印出来,在每个问题之前都有一行“#”字符,代码保持不变出于某种原因跳过问题一?我在这里错过了什么?
以下是代码:
try {
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
strLine = br.readLine();
System.out.println(strLine);
// Read File Line By Line
while ((strLine ) != null) {
strLine = strLine.trim();
if ((strLine.length()!=0) && (strLine.charAt(0)=='#' && strLine.charAt(1)=='#')) {
strLine = br.readLine();
System.out.println(strLine);
//questions[q] = strLine;
}
strLine = br.readLine();
}
// Close the input stream
fstream.close();
// System.out.println(questions[0]);
} catch (Exception e) {// Catch exception if any
System.err.println("Error: " + e.getMessage());
}
答案 0 :(得分:2)
我怀疑,您阅读的文件是带有BOM的UTF-8。
BOM是第一个字符之前的代码,有助于识别文本文件的正确编码。
BOM的问题在于它是不可见的并且扰乱了阅读。带有BOM的文本文件可以说不再是文本文件。特别是,如果您阅读第一行,则第一个字符不再是#
,但它是不同的,因为它是字符BOM + #
。
尝试使用指定的显式编码加载文件。 Java可以在较新的版本中处理BOM,不记得究竟是哪一个。
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
否则,拿一个体面的文本编辑器,如记事本++,并将编码更改为UTF-8而不使用BOM或ANSI编码(yuck)。
答案 1 :(得分:0)
请注意,当您在while中输入if语句时,首先会strLine = br.readLine();
覆盖初始化strline
时读取的行。