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.
Geh die beiden Schritte im Diagramm durch und achte darauf, wohin die Pfeile zeigen.
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 @?