Em Java, como faço para que este método countLines conte uma linha sem um caractere de nova linha?

Cafeinado

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  ) {
Sergey Kalinichenko

Você não está usando sua emptybandeira corretamente. Em vez de inicializá-lo falseantes do loop aninhado, você precisa defini-lo para truequando o caractere for '\n'e falsequando 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 emptypara 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.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

TOP lista

quentelabel

Arquivo