Zeichenketten

Zeichenketten sind eine Aneinanderreihung von Zeichen, deren Anzahl beliebig ist. Eine Zeichenkette kann jederzeit verändert werden. In Java wird eine Zeichenkette durch ein Objekt der Klasse String repräsentiert.

Durchlaufen einer Zeichenkette

Um eine Zeichenkette mit einer Zählschleife zu durchlaufen, wird zunächst die Länge der Zeichenkette mit der Methode length() abgefragt. Die Zählschleife durchläuft nun die Positionen 0, 1, 2, ..., Länge-1 der Zeichenkette und greift per charAt() auf den i-ten Buchstaben zu. Die Nummerierung mit 0 beginnend ist anfangs ungewohnt, sie wird aber in Java konsequent auch in anderen Bereichen (z.B. bei Feldern) durchgeführt.

String eingabe = "TEST";
String ausgabe = "";

for (int i=0; i<eingabe.length(); i++) {
    char c = eingabe.charAt(i);
    System.out.println("Das Zeichen Nr. "+i+"ist: "+c);
}

Im Beispiel ergeben sich demnach folgende Ausgaben auf dem Bildschirm:

Das Zeichen Nr. 0 ist: T
Das Zeichen Nr. 1 ist: E
Das Zeichen Nr. 2 ist: S
Das Zeichen Nr. 3 ist: T

Durchlaufen und Verändern einer Zeichenkette

Im folgenden Beispiel wird die Zeichenkette TEST als Eingabe von vorn nach hinten durchlaufen und für die Ausgabe jeder Buchstabe doppelt angehängt. Als Ausgabe ergibt sich somit: TTEESSTT

String eingabe = "TEST";
String ausgabe = "";

for (int i=0; i<eingabe.length(); i++) {
    char c = eingabe.charAt(i);
    ausgabe = ausgabe + c + c;
}

Durchlaufen und Verändern einer Zeichenkette (Switch)

Das nächste Beispiel zeigt sehr schön, wie mithilfe einer Switch-Struktur übersichtlich verschiedene Fälle bearbeitet werden können. Der i-te Buchstabe wird hier in der Variablen c vom Typ char (also ein Buchstabe) zwischengespeichert. Abhängig vom Buchstaben wird ein anderer Buchstabe oder der ursprüngliche Buchstabe (default-Fall) angehängt.

Das Beispiel demonstriert insgesamt die Normalisierung einer Zeichenkette, da Umlaute in eine adäquate Darstellung (z.B. Ä in AE) gebracht werden. Eine solche Normalisierung findet z.B. bei Suchmaschinen Anwendung, die Sonderzeichen in ihrer internen Speicherung möglichst vermeiden möchten.

String eingabe = "HÖHENÄRGER";
String ausgabe = "";

for (int i=0; i<eingabe.length(); i++) {
    char c = eingabe.charAt(i);

    switch (c) {
        case 'Ä': { ausgabe = ausgabe + "AE"; break; }    
        case 'Ö': { ausgabe = ausgabe + "OE"; break; }    
        case 'Ü': { ausgabe = ausgabe + "UE"; break; }    
        default:  { ausgabe = ausgabe + c; break; }    
    }
}

Durchlaufen und Verändern einer Zeichenkette (ASCII)

Abschließend betrachten wir noch ein Beispiel aus der Kryptologie, das auch im gleichnamigen Kapitel noch einmal in erweiterter Fassung aufgegriffen wird. Wir möchten eine gegebene Zeichenkette Buchstabe für Buchstabe um drei Zeichen im Alphabet nach vorn schieben (Caesar-Verschlüsselung).

Dazu wird jeder Buchstabe zunächst in eine Zahl umgewandelt. Diese Verwandlung richtet sich nach der ASCII-Tabelle (vgl. Wikipedia-Artikel), wodurch dem A eine 65, B eine 66 usw. zugeordnet wird. Dieser Zahl wird 3 hinzuaddiert, die resultierende Zahl wird anschließend wieder in einen Buchstaben zurückverwandelt. Diese geschieht ebenfalls nach der ASCII-Tabelle, wodurch beispielsweise aus dem Buchstaben G ein J wird.

Sollte der Buchstabe beim Umwandeln eine Zahl größer als 90 (entspricht dem Buchstaben Z) ergeben, so würde der ASCII-Bereich der Großbuchstaben verlassen. Dies wird mit der Subtraktion von 26 korrigiert, d.h. es geht hier bei der Verschiebung im Alphabet wieder von vorn los.

String zeichenkette = "GEHEIMNIS";
String ergebnis = "";
int schluessel = 3;

for (int i=0; i<zeichenkette.length(); i++) {

    int zahl = (int) zeichenkette.charAt(i);
    zahl = zahl + schluessel;
    if (zahl>90) { zahl = zahl - 26; }

    char zeichen = (char) zahl;
    ergebnis = ergebnis + zeichen;
}

results matching ""

    No results matching ""