typestar

word_freq.java en Java

El CLI de conteo de palabras en Java: leer un archivo, contar en un mapa, imprimir el top diez.

// word_freq: cuenta palabras en un archivo e imprime las diez más comunes
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

class WordFreq {
    public static void main(String[] args) throws Exception {
        if (args.length != 1) {
            System.err.println("usage: word_freq <file>");
            System.exit(1);
        }

        var counts = new HashMap<String, Integer>();
        for (var line : Files.readAllLines(Path.of(args[0]))) {
            for (var word : line.toLowerCase().split("[^a-z']+")) {
                if (!word.isEmpty()) {
                    counts.merge(word, 1, Integer::sum);
                }
            }
        }

        System.out.println(counts.size() + " distinct words");
        counts.entrySet().stream()
            .sorted(Map.Entry.<String, Integer>comparingByValue()
                .reversed())
            .limit(10)
            .forEach(e -> System.out.printf("%5d  %s%n",
                                            e.getValue(), e.getKey()));
    }
}

Cómo funciona

  1. args trae la línea de comandos; el mal uso sale con código 1.
  2. merge con Integer::sum deja el conteo en una línea.
  3. Un stream ordena las entradas por conteo y formatea el reporte.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
31
Caracteres a escribir
804
Tokens
221
Ritmo de tres estrellas
90 tpm

Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 147 segundos.

Escribe este fragmento

Paso 1 de 2 en Bis; paso 28 de 29 en Fundamentos del lenguaje.

← Anterior Siguiente →