In Delphi gibt es für einzelne Zeichen den Variablentyp CHAR. Eine Variable vom Typ CHAR belegt im Speicher 1 Byte. Ist mit Für Zeichenketten stellt Delphi den Type STRING zur Verfügung. Eine Variable vom Typ STRING belegt im Speicher 256 Byte und kann einen Text mit maximal 255 Zeichen aufnehmen. Dabei werden die einzelnen Zeichen des Textes hintereinander in den Speicher geschrieben, wodurch die sozusagen "durchnummeriert" sind. Man kann damit auch auf die einzelnen Zeichen eines Textes zugreifen: steht in einer String-Variablen s der Text "Informatik", dann enthält s[3] das Zeichen 'f'. Und nach der Zuweisung Zur Ermittlung der Länge einer Zeichenkette sollten Sie immmer die Funktion Length benutzen: nach der Zuweisung text := "Delphi ist cool!" dann liefert LENGTH(text) den Wert 16. In den 32-Bit-Versionen von Delphi gibt es inzwischen eine unübersehbare Menge an verschiedensten Datenstrukturen für die Darstellung von Zeichenketten. Der hier beschriebene Typ "STRING" heißt in Delphi 6 eigentlich "ShortString". Einen Typ "String" gibt es in Delphi 6 auch, und er kann weit mehr als der oben beschriebene "STRING". Sie dürfen trotzdem immer "var s : String;" verwenden, wenn Sie eine Zeichenkettenvariable brauchen: glücklicherweise merkt man im Alltag von den Unterschieden zwischen den verschiedenen Zeichenketten-Typen kaum etwas. (Und der Compiler unterscheidet bei Typ-Bezeichnern auch nicht zwischen Groß- und Kleinschreibung...) Im folgernden Beispiel wird die Zeichenkette in Edit1 in Großbuchstaben umgewandelt: TForm1.Button1Click(Sender: TObject); var zk : STRING; i : Integer; { lokale Laufvariable !!! } begin zk := Edit1.Text; i := 1; While i <= Length(zk) do begin zk[i] := Upcase(zk[i]); i := i + 1; end; Edit1.Text := zk; end; Sie haben also die folgenden "Werkzeuge" zur Verfügung:
|
In Java gibt es für einzelne Zeichen den Variablentyp char. Eine Variable vom Typ char belegt im Speicher 2 Byte. Ist mit Für Zeichenketten stellt Java den Type String zur Verfügung. Eine Variable vom Typ String belegt im Speicher doppelt soviele Bytes, wie der Text, mit dem sie initialisiert wird, Zeichen hat. Dabei werden die Doppelbytes der einzelnen Zeichen des Textes hintereinander in den Speicher geschrieben, wodurch die Zeichen sozusagen "durchnummeriert" sind. Man kann damit auf die einzelnen Zeichen eines Textes zumindest lesend zugreifen: steht in einer String-Variablen s der Text "Informatik", dann schreibt "c = s.charAt(2)" das Zeichen 'f' in die char-Variable c. Beachten Sie, dass die Nummerierung der Zeichen dabei mit Null beginnt: das Auslesen des ersten Zeichens eines Strings geschieht also mit "s.charAt(0)". Leider ist ein schreibender Zugriff auf ein einzelnes Zeichen eines Strings in Java nicht möglich. Zur Ermittlung der Länge einer Zeichenkette sollten Sie immmer die Funktion String.length() benutzen: nach der Zuweisung text := 'Java ist cool!' schreibt "int n = text.length(text)" den Wert 14 in die Variable n. Java stellt noch einige andere Datentypen für Zeichenketten zur Verfügung, wie z.B. den "StringBuffer". Für unsere einfachen Beispiele genügt jedoch der oben beschriebene Typ "String". Im folgernden Beispiel wird die Zeichenkette im Textfeld textField1 in Großbuchstaben umgewandelt: public void button1_ActionPerformed(ActionEvent evt) { /* Eingabe */ String zk = textField1.getText(); /* Quell-String */ char z = ' '; /* mit einem Leerzeichen inizialisieren */ String zk2 = ""; /* Ziel-String, als leer inizialisieren */ /* Verarbeitung */ int i = 0; /* lokale Laufvariable */ while (i < zk.length() ) { z = zk.charAt(i); z = Character.toUpperCase(z); zk2 = zk2 + z; i = i + 1; } /* Ausgabe */ textField2.setText(zk2); }Sie haben also die folgenden "Werkzeuge" zur Verfügung:
|
In Delphi:
If (zk[i] = 'e') or (zk[i] = 'i') or .... then ........... elseEs gibt aber eine elegantere Möglichkeit, nämlich mit Hilfe der "POS"-Funktion. Lesen Sie in der Online-Hilfe nach, was diese Funktion tut, und überlegen Sie sich, wie Sie sie gewinnbringend für eine elegantere Formulierung des Algorithmus einsetzen können!) |
In Java:
if ((zk.charAt(i) == 'e') || (zk.charAt(i) == 'i') || .... ) { ............. }Es gibt aber eine elegantere Möglichkeit, nämlich mit Hilfe der "zk.indexOf(z)"-Methode. Lesen Sie in der Online-Hilfe nach, was diese Funktion tut, und überlegen Sie sich, wie Sie sie gewinnbringend für eine elegantere Formulierung des Algorithmus einsetzen können! |
Ein Programm soll einen Text entgegennehmen und ihn auf Knopfdruck gesperrt ausgeben, d.h.: zwischen je zwei Buchstaben wird ein Leerzeichen eingefügt. Schreiben Sie ein Programm mit 2 Edit-Feldern und einem Knopf: im ersten wird der Text eingegeben, im zweiten erscheint er auf Knopfdruck gesperrt.