Lernpfad:Würfelspiel in Java/Mit Strings arbeiten: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
{{Navigation}} | {{Navigation}} | ||
== Zeichenketten in Java == | == Zeichenketten in Java == | ||
Im Gegensatz zu den [[wikipedia:Primitive Datentypen| | Im Gegensatz zu den [[wikipedia:Primitive Datentypen|primitiven Datentypen]] wie <code>byte</code>, | ||
<code>int</code> oder <code>boolean</code> sind Zeichenketten in Java Objekte der | <code>int</code> oder <code>boolean</code> sind Zeichenketten in Java Objekte der | ||
[https://docs.oracle.com/javase/8/docs/api/java/lang/String.html Klasse String]. Das bedeutete, dass jeder | [https://docs.oracle.com/javase/8/docs/api/java/lang/String.html Klasse String]. Das bedeutete, dass jeder | ||
Zeile 16: | Zeile 17: | ||
'''Hinweis''' Auf einem <code>int</code> können zum Beispiel keine Methoden aufgerufen werden, da Integer | '''Hinweis''' Auf einem <code>int</code> können zum Beispiel keine Methoden aufgerufen werden, da Integer | ||
zunächst keine Objekte sind. Die Java Klassenbibliothek enthält aber auch für diese ''primitiven Datentypen'' | zunächst keine Objekte sind. Die Java Klassenbibliothek enthält aber auch für diese ''primitiven Datentypen'' | ||
eigene Klassen. | eigene Klassen. Etwa die Klasse {{Java API|java.lang.Integer}}. Sie enthält hilfreiche Klassenmethoden zum Umgang mit Integern. | ||
Sie enthält | |||
{{Info:End}} | {{Info:End}} | ||
<!--- | |||
Da Strings Objekte sind, kann es bei ihrer Verwendung zu unerwarteten Fehlern kommen. Ein häufiges Problem ist der | Da Strings Objekte sind, kann es bei ihrer Verwendung zu unerwarteten Fehlern kommen. Ein häufiges Problem ist der | ||
Vergleich von Strings: | Vergleich von Strings: | ||
Zeile 47: | Zeile 48: | ||
Jetzt ist die Ausgabe wie erwartet <code>Die Strings sind gleich.</code>. | Jetzt ist die Ausgabe wie erwartet <code>Die Strings sind gleich.</code>. | ||
---> | |||
== Zeichenketten formatieren == | == Zeichenketten formatieren == | ||
Zeichenketten müssen in Programmen | Zeichenketten müssen in Programmen regelmäßig zur Laufzeit des Programms aus variablen Inhalten zusammengesetzt | ||
werden. Am Ende des Würfelspiels könnte man | werden. Am Ende des Würfelspiels könnte man beispielsweise die Nachricht ''"Spieler 1 hat gewonnen"'' bzw. ''"Spieler 2 | ||
hat gewonnen"'' anzeigen lassen. Die Nummer des Spielers ist hier variabel, je nachdem, welcher Spieler gewonnen hat. | hat gewonnen"'' anzeigen lassen. Die Nummer des Spielers ist hier variabel, je nachdem, welcher Spieler gewonnen hat. | ||
Noch schöner wäre es, wenn zusätzlich der Name des Spielers angezeigt würde. | Noch schöner wäre es, wenn zusätzlich der Name des Spielers angezeigt würde. | ||
Um mit solchen Situationen umzugehen haben sich Zeichenketten mit besonderen Formatierungszeichen und die | Um mit solchen Situationen umzugehen, haben sich Zeichenketten mit besonderen Formatierungszeichen und die {{Java API|java.lang.String|format-java.lang.String-java.lang.Object...-|format-Methode}} etabliert. Für obige Situation könnte der String wie folgt aussehen: | ||
etabliert. Für obige Situation könnte der String wie folgt aussehen: | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Zeile 63: | Zeile 62: | ||
Die Formatierungszeichen beginnen jeweils mit einem <code>%</code>. Das Zeichen <code>%d</code> steht für '''''d'''ecimal | Die Formatierungszeichen beginnen jeweils mit einem <code>%</code>. Das Zeichen <code>%d</code> steht für '''''d'''ecimal | ||
number'', das Zeichen <code>%s</code> für '''''S'''tring''. An Stelle des ersten Platzhalters soll also eine Zahl (in diesem Fall | number'', das Zeichen <code>%s</code> für '''''S'''tring''. An Stelle des ersten Platzhalters soll also eine Zahl (in diesem Fall eine Ganzzahl), an Stelle des Zweiten eine Zeichenkette eingesetzt werden. Mittels <code>format</code> kann man nun | ||
eine Ganzzahl), an Stelle des Zweiten eine Zeichenkette eingesetzt werden. Mittels <code>format</code> kann man nun | |||
beliebige Werte einfügen: | beliebige Werte einfügen: | ||
Aktuelle Version vom 8. Februar 2022, 13:28 Uhr
Zeichenketten in Java
Im Gegensatz zu den primitiven Datentypen wie byte
,
int
oder boolean
sind Zeichenketten in Java Objekte der
Klasse String. Das bedeutete, dass jeder
String Methoden besitzt, die auf ihm aufgerufen werden können.
String einText = "Hello, World!";
einText.length() // 13
einText.toUpperCase() // HELLO, WORLD!
einText.isEmpty() // false
Hinweis Auf einem int
können zum Beispiel keine Methoden aufgerufen werden, da Integer
zunächst keine Objekte sind. Die Java Klassenbibliothek enthält aber auch für diese primitiven Datentypen
eigene Klassen. Etwa die Klasse java.lang.Integer. Sie enthält hilfreiche Klassenmethoden zum Umgang mit Integern.
Zeichenketten formatieren
Zeichenketten müssen in Programmen regelmäßig zur Laufzeit des Programms aus variablen Inhalten zusammengesetzt werden. Am Ende des Würfelspiels könnte man beispielsweise die Nachricht "Spieler 1 hat gewonnen" bzw. "Spieler 2 hat gewonnen" anzeigen lassen. Die Nummer des Spielers ist hier variabel, je nachdem, welcher Spieler gewonnen hat. Noch schöner wäre es, wenn zusätzlich der Name des Spielers angezeigt würde.
Um mit solchen Situationen umzugehen, haben sich Zeichenketten mit besonderen Formatierungszeichen und die format-Methode etabliert. Für obige Situation könnte der String wie folgt aussehen:
String botschaft = "Spieler %d (%s) hat gewonnen";
Die Formatierungszeichen beginnen jeweils mit einem %
. Das Zeichen %d
steht für decimal
number, das Zeichen %s
für String. An Stelle des ersten Platzhalters soll also eine Zahl (in diesem Fall eine Ganzzahl), an Stelle des Zweiten eine Zeichenkette eingesetzt werden. Mittels format
kann man nun
beliebige Werte einfügen:
String.format(botschaft, 1, "Hannes"); // Spieler 1 (Hannes) hat gewonnen
String.format(botschaft, 2, "Johanna"); // Spieler 2 (Johanna) hat gewonnen
String.format(botschaft, 300, "Susanna"); // Spieler 300 (Susanna) hat gewonnen
Doch die Formatierungsmöglichkeiten gehen noch weiter als bloßes ersetzen. Soll zum Beispiel der Punktestand der Spieler als Rangliste angezeigt werden, dann müssen die Punktzahlen passend untereinander stehen (rechtsbündig). Dazu könnte man die Punktzahlen nach links mit Nullen auffüllen, bis alle Punktzahlen gleich viele Zeichen haben.
String eintrag = "%d. %12s: %06d";
String.format(eintrag, 1, "Tim", 1099); // 1. Tim: 001099
String.format(eintrag, 2, "Hannes", 100); // 2. Hannes: 000100
String.format(eintrag, 3, "Johanna", 99); // 3. Johanna: 000099
In diesem Beispiel enthält der String drei Platzhalter:
%d
erwartet wie oben eine Ganzzahl.%12s
erwartet einen String und reserviert für diesen 12 Stellen. Ist die erhaltene Zeichenkette kürzer, dann werden so viele Leerzeichen eingefügt, dass insgesamt 12 Zeichen vorhanden sind.%06d
ist wieder eine Ganzzahl, es sind 6 Zeichen vorgesehen, aber an Stelle eines Leerzeichens wird die Ziffer0
zum Auffüllen genutzt.
Eine kurze Übersicht der Ausgabemethoden und Platzhalter-Befehle gibt es in diesem PDF.
Anstatt einen neuen String zu erzeugen und zu speichern, kann die erzeugte Zeichenkette auch direkt auf der Kommandozeile ausgegeben werden.
String eintrag = "%d. %12s: %06d";
System.out.printf(eintrag, 1, "Tim", 1099);
Zeichenketten in andere Datentypen umwandeln
Manchmal möchte man eine Zeichenkette in einen anderen Datentyp umwandeln. Zum Beispiel kann man mit dem String "4.1"
nicht rechnen, aber mit dem Double-Wert 4.1
schon. Für solche Umwandlungen bieten die Datentyp-Klassen (siehe Hinweis oben) des Zieldatentyps (hier double
) entsprechende Methoden.
Die Umwandlung im Beispiel könnte wie folgt vorgenommen werden:
String zahlAlsString = "4.1";
double zahlAlsDouble = Double.parseDouble(zahlAlsString);
// Nun kann mit zahlAlsDouble gerechnet werden
double ergebnis = zahlAlsDouble + 0.9; // 5.0
Für andere Datentypen gibt es entsprechende Methoden:
Double.parseDouble("4.1");
Integer.parseInt("5");
Boolean.parseBoolean("false");
// Java bietet noch andere Datentypen, als die obigen:
Byte.parseByte("1");
Short.parseShort("7");
Long.parseLong("110399488427273");
Float.parseFloat("4.1");
Die Datentyp-Klassen liegen im Paket java.lang.