public class Stringray extends MiniJava { public static void main(String[] args) { String input = readString("Text eingeben:"); int selection = -1; while (selection < 0 || selection > 3) { selection = readInt("Welche Operation soll angewendet werden?\n\n" + "1 = Häufigkeit der Buchstaben\n" + "2 = Buchstaben ersetzen\n" + "3 = Wortweise Spiegeln\n\n" + "0 = Abbrechen"); } if (selection == 1) letterCommonness(input); else if (selection == 2) replaceLetters(input); else if (selection == 3) reverseWords(input); } // Teilaufgabe 1: public static void letterCommonness(String input) { int[] counter = new int[26]; // Zähler für jeden Buchstaben // Gesamten Text durchlaufen; für jedes Zeichen Zähler anpassen: for (int i = 0; i < input.length(); ++i) { char c = input.charAt(i); if (c >= 'a' && c <= 'z') // Kleinbuchstabe counter[c-'a']++; else if (c >= 'A' && c <= 'Z') // Großbuchstabe counter[c-'A']++; } // Ausgabe mittels write (dazu zunächst Ausgabestring erstellen): String output = ""; for (int i = 0; i < counter.length; ++i) { if (counter[i] > 0) output += ((char) ('A' + i)) + ": " + counter[i] + "\n"; } write(output); } // Teilaufgabe 2: public static void replaceLetters(String input) { char oldChar = ' '; // hier wird der zu ersetzende in Uppercase gespeichert while (oldChar < 'A' || oldChar > 'Z') { // solange Eingabe ungültig ist String in = readString("Welcher Buchstabe soll ersetzt werden?"); if (in.length() == 1) { oldChar = in.charAt(0); if (oldChar >= 'a') // Lower- zu Uppercase umwandeln oldChar -= 32; } } char newChar = ' '; // hier wird der ersetzende in Uppercase gespeichert while (newChar < 'A' || newChar > 'Z') { String in = readString("Wie lautet der neue Buchstabe?"); if (in.length() == 1) { newChar = in.charAt(0); if (newChar >= 'a') newChar -= 32; } } String output = ""; for (int i = 0; i < input.length(); ++i) { char c = input.charAt(i); if (c == oldChar) // Uppercase Match output += newChar; else if (c == oldChar+32) // Lowercase Match output += (char)(newChar+32); else // kein Match -> unverändert anfügen output += c; } write(output); } // Teilaufgabe 3: public static void reverseWords(String input) { String output = ""; // Endergebnis (umgekehrter String) String lastWord = ""; // aktuelles Wort (gerade dabei es zu invertieren) for (int i = 0; i < input.length(); ++i) { char c = input.charAt(i); if (c == ' ') { // Leerzeichen = Trennzeichen output += lastWord + ' '; // zuletzt invertiertes Wort inkl. diesem Leerzeichen anfügen lastWord = ""; // zurücksetzen (-> nächstes Wort) } else { lastWord = c + lastWord; // Buchstabe vorne anfügen (ab -> ba) } } output += lastWord; // Nicht vergessen: Allerletztes Wort separat (danach kam ja kein Leerzeichen) write(output); } }