以下代码对文本文件中的行进行计数,但是如果存在没有换行符('\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
决定是否应增加行数。这将涵盖文件多行的情况。