Ben*_*nWS 1 java while-loop java-8
我编写了一段代码来计算文件中的行数(我无法找到可以在IO类中实现这一点的内置方法).我的代码如下:
try {
while(!line.equals("null")) {
line = bufferedReader.readLine();
a = a + 1;
System.out.println(a + " " + line);
}
} catch (NullPointerException N) {}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当变量'line'计算为"null"时,计数仍然增加.我明白为什么会这样; 在整个代码块运行之后,while语句才会检查条件,在这种情况下,'a'将再次增加.我考虑过的解决方案:
1)设置'a = -1',而我在此代码块之前当前有'a = 0'2)使用if语句在达到count变量之前打破循环.这是我修改代码块的方法:
try {
while(!line.equals("null")) {
line = bufferedReader.readLine();
if (line.equals("null")) {break;}
a = a + 1;
System.out.println(a + " " + line);
}
} catch (NullPointerException N) {}
Run Code Online (Sandbox Code Playgroud)
我上面的问题?(1)似乎太做作,而(2)似乎多余.我想看看是否有更好的方法来解决这个问题 - 感谢您的建议.
除非您的文件以包含字符串"null"的行结束,否则您的代码是错误的.你应该比较null,而不是"null".
关于你原来的问题,你可以通过读取一行并null在循环条件下测试来避免额外的计数:
while((line = bufferedReader.readLine()) != null) {
a = a + 1;
System.out.println(a + " " + line);
}
Run Code Online (Sandbox Code Playgroud)
有一个LineNumberReader类完全符合你的要求.
try(LineNumberReader lnr = new LineNumberReader(new FileReader(new File("file.txt"))) {
lnr.skip(Long.MAX_VALUE);
linesCount = lnr.getLineNumber() + 1; //because it's index from 0
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |