String

Entschuldige, da fehlt noch was...
--> Muss noch überarbeitet werden…Ziele
- Ich kann
String
-Variablen deklarieren und initialisieren. - Ich kann mehrere
String
s miteinander in eineString
-Variable verknüpfen (String Concatenation). - Ich weiss, wann man einen
StringBuilder
verwenden sollte. - Ich weiss, wie ich herausfinde, wie viele Zeichen eine
String
-Variable enthält. - Ich weiss, dass
String
-Variablen nicht mit==
sondernequals
verglichen werden sollten. - Ich kann von der Klasse
String
folgende Methode anwenden:toUpperCase()
,toLowerCase()
,charAt(...)
,indexOf(...)
,contains(...)
,substring(...)
,replace(...)
,split(...)
.
String
Eine Variable, die eine Zeichenkette repräsentiert, hat den Typ String
und kann wie folgt initialisiert werden:
|
|
Diese Zeichenkette besteht aus 11 Zeichen, einschliesslich eines Leerzeichens. Wie wir hier ebenfalls sehen, müssen String-Literale von doppelten Anführungszeichen umgeben sein.
Ein Objekt des Typs String
ist unveränderlich, die Werte innerhalb eines Strings können also nach dessen Erstellung
nicht mehr verändert werden - der Variable kann aber ein neuer String
-Wert zugewiesen werden:
|
|
Ausserdem ist es möglich, Strings mit mehreren Zeilen zu definieren, indem du einen String mit 3 "
beginnst und
beendest und den String auf einer neuen Zeile beginnst:
|
|
Strings verknüpfen (String Concatenation)
Oft generierst du aus verschiedenen Variablen EINEN neuen String
. Angenommen du hast eine Variable für “name” und
“age” (Alter), dann kannst du wie folgt den String “Hallo {name}, du bist {age} Jahre alt.” generieren:
|
|
Alternativ kannst du statt die vielen +
auch von der String.format()
-Methode Gebrauch machen:
|
|
Bei der String.format()
-Methode übergeben wir dann die einzelnen Werte als Argumente. Beachte hierbei, dass %s
für
String- und %d
für Integer-Werte verwendet werden.
Wenn Performance (also wie schnell, dass ein Programm läuft) eine übergeordnete Rolle einnimmt, dann wird die Methode
mit einem StringBuilder
bevorzugt:
|
|
Hierbei musst du aber zuerst ein neues StringBuilder
-Objekt erstellen. (Im Modul #J1 musst du solche Objekte noch
nicht verstehen.) Anschliessend fügst du alle einzelnen Strings via .append(...)
hinzu. Den gewünschten String kannst
du dann mit .toString()
generieren lassen.
Neue Zeilen oder Tabs
Beim Verknüpfen von Strings ist es oft praktisch, wenn man Zeilenumbrüche hinzufügen kann. Dies kannst du mit dem
Character
'\n'
(new line) tun:
|
|

\r\n
. Das führt oft zu Problemen, wenn zum Beispiel Konfigurationsdateien zwischen Linux und Windows
Systemen getauscht werden.Das Gleiche ist auch mit Einrückungen (Tabulatoren) möglich mit dem Character
'\t'
(tab):
|
|
Im Java fungiert das Zeichen \
als “escape character”. Das bedeutet, dass spezielle Zeichen, die in einem String
regulär nicht möglich wären, oft irgendwie mit einem \
“escaped” werden. Neben der “New-Line” und dem “Tabulator” gibt
es noch weitere, die oft verwendet werden:
\\
: Das\
-Zeichen (“Backslash) selber.\"
: Ein Anführungszeichen in einem String.
Hier ein Beispiel, wie das Anführungszeichen und Backslash in einem String verwendet werden können:
|
|
Methoden
Nachfolgend sind einige der wichtigsten Methoden der Klasse String
beschrieben. Alle Methoden sind detailliertet
beschrieben unter java.lang.String
zu finden.
Anzahl Zeichen (String.length()
)
Bei Strings sind dessen Länge (also Anzahl Zeichen) oft von Interesse.
Im folgenden Beispiel wird eine Nachricht ausgegeben, wenn eine Dummy-Usereingabe nicht mindestens 6 Zeichen enthält:
|
|
Strings miteinander vergleichen (String.equals(String)
)
Sehr oft wirst du überprüfen, ob ein String einem anderen entspricht. Dies kannst du mit der equals()
-Methode tun:
|
|
Beachte hierbei, dass du zum Vergleichen von Strings in Java immer equals()
nun nie ==
verwenden solltest, weil
String
kein primitiver Datentyp ist. ==
funktioniert in einfacheren Beispielen, führt aber in vielen Fällen trotzdem
nicht zum gewünschten Resultat.
In Gross-/Kleinbuchstaben umwandeln
In bestimmten Fällen soll die Gross- und Klein-Schreibung keine Rolle spielen. Nehmen wir hierfür noch einmal das
Beispiel von der equals
-Methode:
|
|
Die relevanten String-Methoden bezüglich Gross- und Klein-Schreibung sind hierbei:
toUpperCase()
: Gibt die Zeichenkette in Grossbuchstaben zurück.toLowerCase()
: Gibt die Zeichenkette in Kleinbuchstaben zurück.
Eine häufige Fehlerquelle ist es zu denken, dass eine dieser beiden Methoden den String verändert. Strings können sich aber nicht verändern. Deswegen geben diese beide Funktionen einen neuen String zurück, der Wert in der Variable bleibt also unverändert:
|
|
Damit dieses Beispiel wie gewollt funktioniert, müsste es so geschrieben werden:
|
|
Buchstaben an bestimmter Position ermitteln (String.charAt(int)
)
Wenn du z.B. alle Buchstaben in einem String durchgehen willst, dann musst du irgendwie den Buchstaben (char
) an einer
bestimmten Position des Strings ermitteln können. Dies kannst du mit charAt(int)
.
Das folgende Beispiel liest den ersten Buchstaben aus einem String aus und gibt in aus:
|
|
Beachte, dass die Nummerierung in Java generell bei 0 beginnt. Für das erste Element übergibst du 0, für das zweite 1,
für das vierte 3, für n
das (n-1)
-te, usw. Für charAt(...)
bedeutet das, dass du wie folgt Buchstaben an
bestimmten Positionen ermittelst:
|
|
Nach Strings in Strings suchen (String.indexOf()
und String.contains()
)
In seltenen Fällen möchtest du wissen, an welcher Position ein kleinerer String (oder char
) in einem grösseren String
vorkommt. Diese Information erhältst du mit indexOf(String/char)
.
Möchtest du z.B. herausfinden, an welcher Stelle in einer Email-Adresse das “@” steht, dann könnte das wie folgt aussehen:
|
|
In diesem Fall gibt die Methode 7
zurück, weil sich das @
an der 8. Stelle befindet.
Allgemein gibt indexOf(...)
folgendes zurück:
- Wenn der Suchbegriff vorkommt, dann die Position, wo der Suchbegriff zum ersten Mal beginnt.
- Wenn der Suchbegriff nie vorkommt:
-1
.
Weil -1
zurückgeben wird, wenn der Suchbegriff nicht vorkommt, könnte diese Methode auch dafür verwendet werden, um
herauszufinden, ob ein bestimmter Text in einem String vorkommt. Java bietet aber für diesen Fall bereits eine
praktischere Methode:
|
|
Der Vorteil von der contains()
-Methode ist, dass sie bereits einen boolean
zurückgibt, was die if
-Anweisung
einfacher macht als das Überprüfen nach -1
.
Text aus einem String ausschneiden
Die substring()
-Methode ist nützlich, wenn ein Text aus einem String ausgeschnitten werden soll.
In diesem Beispiel interessiert uns die Information nach dem “:”, welches sich immer an 6. Stelle befindet:
|
|
In diesem Beispiel haben wir mit dem Schneiden an 7. Stelle begonnen. Wir können aber auch angeben, wie viele Zeichen ausgeschnitten werden sollen:
|
|
In diesem Beispiel beginnt das Ausschneiden bei Index 9 und hört 1 Zeichen VOR Index 12 auf.
In all diesen Beispielen sind wir davon ausgegangen, dass wir wissen, ab welcher Stelle das Ausschneiden beginnt. Oft
ist diese Stelle aber dynamisch. Hier kann daher eine Kombination mit indexOf()
weiterhelfen:
|
|
Teile eines Strings ersetzen (String.replace()
)
Ein bestimmter Teil eines Strings kannst du mit replace
ersetzen:
|
|
Beachte auch hier, dass replace
den ursprünglichen String nicht verändert, sondern einen neuen zurückgibt.
Jetzt bist du dran. Löse bitte die folgenden
!*Aufgaben in den Labs.