计算跳过空文本的文本行数

时间:2013-11-19 22:57:08

标签: java

我需要帮助。你能告诉我如何计算input.txt中的行数而不计算空的空行吗?

到目前为止,我试过了:

    BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
    int lines = 0;
    while (reader.readLine() != null)
    lines++;

所以,这段代码可以计算行数,但是空行!我知道有一些字符/ n表示新行,但我不知道如何将它集成到解决方案中。

我还尝试计算行数,空行数并减去它们,但我没有成功。

3 个答案:

答案 0 :(得分:5)

BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
int lines = 0;
String line;
while ((line = reader.readLine()) != null){
    if(!"".equals(line.trim())){
        lines++;
    }
}

答案 1 :(得分:3)

您只需要记住您正在查看的行,并在计算之前进行检查:

int lines = 0;
String line;
while ((line = reader.readLine()) != null) {
    if (!line.isEmpty()) {
        lines++;
    }
}

请注意,您应该关闭阅读器 - 在显式finally语句中,或在Java 7中使用try-with-resources语句。我建议不要使用FileReader - 它总是使用平台默认编码,这不是一个好主意,IMO。将FileInputStreamInputStreamReader一起使用,并明确说明编码。

您可能还想跳过完全由空格组成的行,但这是对if (!line.isEmpty())条件的轻松更改。例如,您可以使用:

if (!line.trim().isEmpty())
而不是......虽然找到一个只是检测的辅助方法会更清楚一个字符串是否只包含空格而不是构造一个新字符串。例如,正则表达式可以做到这一点。

答案 2 :(得分:2)

BufferedReader's readLine() method仅在到达流末尾时返回null。要不计算空行,请测试该行是否存在以及它是否为空,然后不计算它。

引用上面链接的Javadoc:

  

返回:

     

包含行内容的字符串,不包括任何行终止字符;如果已到达流的末尾,则为null