Java NIO File - Duvida com algoritimo para contar consoantes, vogais e espaços

Bom dia!

Estou fazendo um exercício em JAVA cujo objetivo é ler um arquivo .txt de entrada e a quantidade de letras, vogais, consoantes e palavras dentro do arquivo. O algoritmo que eu escrevi cria os arquivos, mas o problema está na contagem dessas letras (é um problema de iniciantes, como eu haha)

Segue o código-fonte:

public static void main(String[] args) throws IOException {

    FileWriter entrada = new FileWriter("entrada.txt");
    entrada.write("aaa cc\n");
    entrada.close();

    BufferedReader txt = new BufferedReader(new FileReader("entrada.txt"));
    String texto = txt.readLine();
    int espaço = 0;
    int consoante = 0;
    int vogal = 0;
    int letra = 0;
    int palavra = 0;
    while (txt.read() != -1) {
        for (int i = 0; i < texto.length(); i++) {
            if (texto.charAt(i) == ' ') {
                espaço++;
            } else if (texto.charAt(i) != 'a' & texto.charAt(i) != 'e' & texto.charAt(i) != 'i'
                    & texto.charAt(i) != 'o' & texto.charAt(i) != 'u') {
                consoante++;
                letra++;
            } else {
                vogal++;
                letra++;
            }
            if (i+1 < texto.length())
            if (texto.charAt(i + 1) == ' ') {
                palavra++;
            }
        }
    }

    FileWriter saida = new FileWriter("saida.txt");
    saida.write("Número de espaços: "+espaço+" \n");
    saida.write("Número de consoantes: "+consoante+" \n");
    saida.write("Número de vogais: "+vogal+" \n");
    saida.write("Número de letras: "+letra+" \n");
    saida.write("Número de palavras: "+palavra+" \n");
    saida.close();
}

Como podem ver, o texto que o algoritmo esta analisando é: “aaa cc” com uma quebra de linha no final. Mas o arquivo de saida imprime 0 para todos os valores, como se não encontrasse nenhuma letra. Alguém poderia me ajudar a solucionar este problema? Grato!

Você parece estar tentando preencher a variável texto (que é usada no for) fora do contexto de leitura (while (txt.read() != -1) . Acho que isso está deixando sua variável texto sem valor.

O primeiro passo seria garantir que as variáveis analisadas estão recebendo valores. Algo como:

BufferedReader txt = new BufferedReader(new FileReader("entrada.txt"));
String texto = "";
while ((texto = txt.readLine()) != null) {
  System.out.println(texto);
}

Se imprimir as linhas do arquivo, você sabe que a variável texto está correta. Daí pode ver se o problema é na parte do for.

Referência: https://www.mkyong.com/java/java-read-a-text-file-line-by-line/

Abraço.

1 curtida

Ele imprime certo! Tudo indica que a variável texto recebe o texto corretamente.

Creio que o problema esteja no for, mas ainda não consegui solucionar!

:confused:

Pelos testes que fiz, o problema é que ele não está entrando no while. No seu exemplo, a linha abaixo retorna false.

(txt.read() != -1)

Se vc tirar esse while e deixar só o for vc verá que a contagem parece funcionar.

1 curtida

Claro! Era este o problema.

Muito obrigado pela ajuda!

:smile:

1 curtida