O código a seguir conta as linhas em um arquivo de texto, mas não as conta se houver uma linha sem um '\n'
caractere newline ( ):
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();
}
Quando tentei adicionar o código c[i] != null
à condição if, ocorreu este erro:
NewParentClass.java:72: erro: tipos incomparáveis: byte e ''
if (c[i] == '\n' || c[i] != null ) {
Você não está usando sua empty
bandeira corretamente. Em vez de inicializá-lo false
antes do loop aninhado, você precisa defini-lo para true
quando o caractere for '\n'
e false
quando não for:
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;
Depois de chegar ao final do método, use empty
para decidir se a contagem de linhas deve ser incrementada ou não. Isso cobrirá situações em que seu arquivo tem mais de uma linha.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras