---
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);
}
```