Zeichenketten
String ist der erste Objekttyp, mit dem du richtig arbeitest. Ein String-Objekt speichert eine Folge von Zeichen und bringt eine Reihe von Methoden mit – Fähigkeiten, die du auf dem Objekt aufrufen kannst.
Methoden aufrufen
Sage zuerst ohne Rechner voraus, was die sechs Zeilen ausgeben. Führe das Programm erst danach aus.
Auflösung
10
I
Infor
matik
5
INFORMATIK
Der Punkt zwischen wort und length() bedeutet: „Rufe auf dem Objekt wort die Methode length auf.“ Das ist derselbe Punkt wie bei hase.setPosition(...) im ersten Kapitel.
| Methode | Ergebnis |
|---|---|
wort.length() |
Anzahl der Zeichen |
wort.charAt(i) |
das Zeichen an Position i als char |
wort.substring(a, b) |
Teilzeichenkette von Position a bis vor b |
wort.substring(a) |
alles ab Position a |
wort.indexOf(teil) |
Position des ersten Vorkommens, sonst -1 |
wort.toUpperCase() |
alles in Großbuchstaben |
wort.equals(anderes) |
true, wenn beide denselben Inhalt haben |
Die Zählung beginnt bei 0. Das erste Zeichen hat die Position 0, das letzte die Position length() - 1.
Die wichtigste Falle: gleich ist nicht gleich
Sage voraus, was das Programm ausgibt. Diese Aufgabe ist eine Falle – nimm dir Zeit.
Auflösung
Wenn du Hallo eingetippt hast:
true
true
false
true
Der Vergleich mit == prüft bei Objekttypen, ob beide Variablen auf dasselbe Objekt verweisen – nicht, ob der Inhalt gleich ist.
a und b verweisen zufällig auf dasselbe Objekt, weil Java gleiche Textkonstanten aus dem Quelltext zusammenlegt. c entsteht dagegen erst beim Einlesen – ein neues Objekt mit gleichem Inhalt, aber an anderer Stelle im Speicher.
Zeichenketten vergleicht man immer mit equals, niemals mit ==.
if (eingabe.equals("ja")) { ... }
Dieser Fehler ist so häufig, dass er einen eigenen Merksatz verdient: == vergleicht Verweise, equals vergleicht Inhalte. Bei elementaren Typen wie int ist == dagegen genau richtig.
Aufgabe 1: Initialen
Schreibe ein Programm, das nach Vor- und Nachnamen fragt und daraus die Initialen bildet:
Vorname: Ada
Nachname: Lovelace
Initialen: A.L.
Tipp: Wie komme ich an den ersten Buchstaben?
vorname.charAt(0) liefert das erste Zeichen. Alternativ geht auch vorname.substring(0, 1) – das ergibt einen String statt eines char.
Aufgabe 2: Palindrom-Vorbereitung
Ein Palindrom liest sich vorwärts wie rückwärts, zum Beispiel Otto oder Rentner.
Schreibe ein Programm, das ein Wort einliest und das erste und das letzte Zeichen ausgibt – und danach mitteilt, ob diese beiden übereinstimmen.
Den vollständigen Palindromtest baust du in Kapitel 3, wenn du Schleifen kennst.
Tipp 1: Das letzte Zeichen
Das erste Zeichen steht an Position 0. Das letzte steht nicht an Position length(), sondern eine Stelle davor: wort.length() - 1.
Tipp 2: Zwei Zeichen vergleichen
charAt liefert einen char – und das ist ein elementarer Typ. Zwei char vergleichst du deshalb mit ==, nicht mit equals.
Zusatzaufgabe
Schreibe ein Programm, das eine E-Mail-Adresse einliest und daraus den Namen (alles vor dem @) und die Domain (alles danach) getrennt ausgibt.
Du brauchst dafür indexOf und substring. Überlege dir außerdem: Was macht dein Programm bei einer Eingabe ohne @?