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
argstrae la línea de comandos; el mal uso sale con código 1.mergeconInteger::sumdeja el conteo en una línea.- Un stream ordena las entradas por conteo y formatea el reporte.
Palabras clave y builtins usados aquí
classforifnewpublicstaticthrowsvarvoid
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.
Paso 1 de 2 en Bis; paso 28 de 29 en Fundamentos del lenguaje.