以下代码对文本文件中的行进行计数,但是如果存在没有换行符('\n')的行,则不对它们进行计数:

public static int countLines(String filename) throws IOException {
    InputStream is = new BufferedInputStream(new FileInputStream(filename));


try {
    byte[] c = new byte[1024];
    int count = 0;
    int readChars = 0;
    boolean empty = true;
    while ((readChars = is.read(c)) != -1) {
        empty = false;
        for (int i = 0; i < readChars; ++i) {
            if (c[i] == '\n'   /*  || c[i] != null  */ ) {
                ++count;
            }
        }
    }
    return (count == 0 && !empty) ? 1 : count;
} finally {
    is.close();
}


当我尝试将代码c[i] != null添加到if条件中时,出现了此错误:


  NewParentClass.java:72:错误:不可比较的类型:字节和''

    if (c[i] == '\n'    || c[i] != null  ) {

最佳答案

您没有正确使用empty标志。而不是在嵌套循环之前将其初始化为false,您需要在字符为true时将其设置为'\n',而在非字符时将其设置为false

boolean empty = true;
while ((readChars = is.read(c)) != -1) {
    for (int i = 0; i < readChars; ++i) {
        if (c[i] == '\n') {
            ++count;
            empty = true;
        } else {
            empty = false;
        }
    }
}
if (!empty) {
    count++;
}
return count;


一旦到达方法的末尾,请使用empty决定是否应增加行数。这将涵盖文件多行的情况。

10-05 22:37