import java.util.Map;
import java.util.TreeMap;

/** Cuenta cuántas veces aparece cada palabra de un texto. */
public final class WordCount {

    private WordCount() {
    }

    /** Separa el texto en palabras (en minúsculas) y las cuenta, en orden alfabético. */
    public static Map<String, Integer> count(String text) {
        Map<String, Integer> counts = new TreeMap<>();
        for (String word : text.toLowerCase().split("[^\\p{L}]+")) {
            if (word.isEmpty()) {
                continue;
            }
            int before = counts.getOrDefault(word, 0);
            counts.put(word, before + 1);
        }
        return counts;
    }
}
