PR2/Lernen/WordCounter.java

95 lines
3.7 KiB
Java

package Lernen;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
public class WordCounter {
public static void main(String[] args) {
// Dateipfad zur gedichte.txt
String filePath = "gedichte.txt";
// TreeMap zur Speicherung der Wörter und ihrer Häufigkeiten
TreeMap<String, Integer> wordCountMap = new TreeMap<>();
// Zähle die Wörter in der Datei und finde das längste Wort
int longestWordLength = countWords(filePath, wordCountMap);
// Sortiere die TreeMap nach den Häufigkeiten
List<Map.Entry<String, Integer>> sortedWordList = new ArrayList<>(wordCountMap.entrySet());
sortedWordList.sort(Map.Entry.comparingByValue(Collections.reverseOrder()));
// Gib die Wörter und ihre Häufigkeiten aus
System.out.println("Wortauflistung:");
for (Map.Entry<String, Integer> entry : sortedWordList) {
System.out.println("'" + entry.getKey() + "' kommt " + entry.getValue() + "-mal vor");
}
// Gib die Anzahl der verschiedenen Wörter aus
System.out.println("Es sind " + wordCountMap.size() + " verschiedene Worte");
// Gib das häufigste Wort aus
System.out.println("Das häufigste Wort ist '" + sortedWordList.get(0).getKey() + "', es kommt " +
sortedWordList.get(0).getValue() + "-mal vor");
// Gib das längste Wort aus
System.out.println("Das längste Wort hat eine Länge von " + longestWordLength + " Zeichen");
}
public static int countWords(String filePath, TreeMap<String, Integer> wordCountMap) {
int longestWordLength = Integer.MIN_VALUE; // Initialisiere mit dem kleinsten möglichen Wert
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
String[] words = line.split("\\s+");
for (String word : words) {
word = word.toLowerCase().replaceAll("[^a-zA-ZäöüÄÖÜß]", ""); // Entferne Sonderzeichen
if (!word.isEmpty()) {
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
longestWordLength = Math.max(longestWordLength, word.length()); // Aktualisiere die maximale Wortlänge
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return longestWordLength;
}
}
//Ohne Sortierung
//Dateipfad zur gedichte.txt
/*String filePath = "gedichte.txt";
// HashMap zur Speicherung der Wörter und ihrer Häufigkeiten
HashMap<String, Integer> wordCountMap = new HashMap<>();
// Zähle die Wörter in der Datei und finde das längste Wort
int longestWordLength = countWords(filePath, wordCountMap);
// Gib die Wörter und ihre Häufigkeiten aus
System.out.println("Wortauflistung:");
for (String word : wordCountMap.keySet()) {
int count = wordCountMap.get(word);
System.out.println("'" + word + "' kommt " + count + "-mal vor");
}
// Gib die Anzahl der verschiedenen Wörter aus
System.out.println("Es sind " + wordCountMap.size() + " verschiedene Worte");
// Gib das häufigste Wort aus
String mostFrequentWord = "";
int maxFrequency = 0;
for (String word : wordCountMap.keySet()) {
int count = wordCountMap.get(word);
if (count > maxFrequency) {
maxFrequency = count;
mostFrequentWord = word;
}
}
System.out.println("Das häufigste Wort ist '" + mostFrequentWord + "', es kommt " + maxFrequency + "-mal vor");
// Gib das längste Wort aus
System.out.println("Das längste Wort hat eine Länge von " + longestWordLength + " Zeichen");*/