--- author: Florian Fischer lang: de title: Cesar Implementierung schwer ---
**Wie bekomme ich jedes Zeichen in einem Text?** Java bietet die Methode [`char String.charAt(int pos)`{.java}](), um auf ein einzelnes Zeichen (`char`{.java}) in einem String an der 0-indizierten Stelle `pos`{.java} zuzugreifen. Mit einer `for`{.java} Schleife und der Länge des Strings ([`String.length()`{.java}]()) hast du alles was du brauchst.
**Wie erkenne ich schreibbare ASCII Zeichen?** * Alle nichtschreibbaren ASCII Zeichen kommen vor dem Leerzeichen. * Siehe: ASCII-Tabelle ([Wikipedia](https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle))
**Wie schaffe ich es, den Zeichenbereich nicht zu verlasse?** * Mit dem [Modulo-Operator `%`](https://de.wikipedia.org/wiki/Modulo) * oder mit geeigneten `if`{.java} Bedingungen kannst du dafür sorgen, dass dein neues Zeichen immer noch im Zeichenbereich liegt.
**Wie kann ich einen neuen `String`{.java} zusammenbauen?** Du kannst einzelne Zeichen zu einem `String`{.java} einfach mit dem Plus-Operator `+` hinzufügen.
**Wie kann ich `int`{.java} in `char`{.java} umwandeln?** In Java können Daten vom Typ `int`{.java} mit einem [Type-Cast]() zum Typ `char`{.java} umgewandelt werden. Auch das Ergebnis einer Rechnungen kann umgewandelt werden. * `char c = (char)27; // Umwandlung einer Zahl`{.java} * `char c = (char)("a".charAt(0) + 27); // Umwandlung eines Ergebnisses`{.java}
**Lösung** Sicher dass du die Lösung sehen willst?
**Ja!**
`String caesar(String eingabe, int verschiebung)`{.java} ```java /** * Das gesamte schreibbare Alphabet der ASCII Tabelle */ static final String ALPHABET = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; static String caesar(String eingabe, int verschiebung) { String ausgabe = ""; for (int i = 0; i < eingabe.length(); i++) { // Das erste schreibbare Zeichen hat den Zahlenwert 33 int pos = eingabe.charAt(i) - 33; // Uebernehme nicht schreibbare Zeichen direkt if(pos < 0) { ausgabe += eingabe.charAt(i); continue; } // Berechne die neue Position im Alphabet int newPos = (pos + verschiebung); // Positiver Ueberlauf if(newPos >= ALPHABET.length()) { newPos = newPos - ALPHABET.length(); } // Negativer Ueberlauf else if(newPos < 0) { newPos = newPos + ALPHABET.length(); } ausgabe += ALPHABET.charAt(newPos); } return ausgabe; } ```
`String entschluesseln(String geheimtext, int schluessel)`{.java} ```java static String entschluesseln(String geheimtext, int schluessel) { // Um die selbe Anzahl an Stellen in die entgegengesetze Richtung // verschieben, erzeugt wieder den Klartext. return caesar(geheimtext, -schluessel); } ```