Pregunta

Estoy escribiendo un programa que por una parte pide el programa para imprimir el número de caracteres (incluyendo espacios en blanco) se encuentran en un archivo. El código que tengo en este momento, aunque devuelve 0 cada vez y aunque no estoy seguro de por qué no es contando los caracteres.

public int getcharCount(Scanner textFile) {

        int count = 0;

        while(textFile.hasNext()) {
            String line = textFile.nextLine();
            for(int i=0; i < line.length(); i++)
                count++;
        }   
        return count;

    }

Editar: Las especificaciones para mi programa dicen que debería usar un escáner. No creo que es lo que hace que el bucle for aunque no estoy seguro. Cuando he utilizado la misma técnica para contar el número de líneas en el archivo, que funcionaba perfectamente. Ese código fue:

 public int getLineCount(Scanner textFile) {
    int lineCount = 0;

    while(textFile.hasNext()) {
        String line = textFile.nextLine();
        lineCount++;
    }

    return lineCount;
}

Y nosotros no estamos obligados a comprobar si la línea contiene algo o no. Si aparece en el medio del archivo de texto, también debe tenerse en cuenta como un carácter.

¿Fue útil?

Solución

No sé por qué no funciona (y el código de abajo no lo arreglará), pero

  for(int i=0; i < line.length(); i++)
            count++;

se puede escribir más concisa como

  count += line.length();

Otros consejos

¿Por qué utiliza un escáner? Un simple lector sería suficiente. Si usted insiste en el uso de un escáner, se debe entender que se divide su entrada en campos separados por un cierto patrón (un espacio por defecto), tal vez se puede establecer un patrón vacío para que los campos se corresponden con los personajes (pero de nuevo, que lo haría ser una exageración, sólo tiene que utilizar un lector)

¿Usted ya ha leído todo, desde el escáner antes de pasarla a getcharCount()?

Es necesario asignar el archivo, abrirlo, y restablecer al principio. No se presenta nada de eso.

¿Qué delimitador estás fijando para el escáner? Usted no se presenta en su código, pero hay que hacerlo tratar a una línea como un único token.

scanner.useDelimiter("\n");

Además, se dice que el segundo ejemplo de código funcionó a la perfección. ¿Ha impreso el valor de la línea para verificar que no contenía nada? Podría haber contado las líneas correctamente, pero si la línea en realidad no contiene nada entonces que podría ayudar a explicar por qué no entrar en el bucle.

No he trabajado con escáner demasiado, pero no lo haría

textFile.hasNextline();

hacer un poco más de sentido que

textFile.hasNext();

Es sólo una idea - no estoy seguro de si eso tendría ningún efecto importante en la ejecución

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top