studyklar
GdI 1 · Übungsblatt 9 · Aufgabe 1

StringBuilder: einen String Schritt für Schritt verändern

Ein StringBuilder ist ein Text, den man nachträglich verändern kann. Ein Menüprogramm soll ihn Schritt für Schritt bearbeiten: anhängen, einfügen, löschen, ersetzen, Zeichen lesen und setzen. Die Vorlage gibt das Menü vor, zu ergänzen sind Deklarationen und die Fälle der switch-Anweisung. Rechts steht der Inhalt des StringBuilders in einem Beispiellauf, jedes Zeichen mit seiner Position. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 9.1

Schreiben Sie ein Java-Programm A9_1 zur schrittweisen Erstellung und Manipulation eines Strings mittels StringBuilder. Ergänzen Sie hierzu die vorbereitete Vorlage A9_1.java um die zusätzlich erforderlichen Deklarationen und Anweisungen.

Die zu realisierenden Funktionen ergeben sich aus der Vorlage. Nach jedem Manipulationsschritt soll der aktuelle Stand des StringBuilders zur Kontrolle ausgegeben werden.

Vorlage (Datei A9_1_vorlage.java):

class A9_2 {    // Experimente mit StringBuilder     public static void main (String[ ] args) {        StringBuilder b = new StringBuilder();        boolean ready = false;        int opcode;          // **********************************************        // Ergänzen Sie hier erforderliche Deklarationen        // **********************************************          Out.println("Sie erstellen und manipulieren schrittweise einen String.");         while (!ready) {            Out.println("Bitte geben Sie den gewünschten Operationscode ein:");            Out.println("0 -> Beenden.  Finaler String wird ausgegeben.");            Out.println("1 -> Anhängen: String angeben.");            Out.println("2 -> Einfügen: String und Position angeben.");            Out.println("3 -> Löschen:  Erste und letzte Position angeben.");            Out.println("4 -> Ersetzen: Erste und letzte Position und neuen String angeben.");            Out.println("5 -> Zeichen an Position ermitteln: Position angeben.");            Out.println("6 -> Zeichen setzen: Position und neues Zeichen angeben.");            Out.println("7 -> Substring ermitteln: Erste und letzte Position angeben.");            opcode = In.readInt();             switch (opcode) {                  // ******************************************                // Ergänzen Sie hier die nötigen Anweisungen                // ******************************************              }        }        Out.println();    }}

Die Vorlage liest in einer Schleife einen Operationscode ein, eine Zahl von 0 bis 7. Jede Zahl steht für eine Operation auf dem StringBuilder b. Was jede Operation tut, steht schon im Menü; welche Werte der Benutzer dazu eingibt, auch. Unsere Arbeit: die Variablen für diese Werte anlegen und für jeden Code die passende Anweisung schreiben. Nach jeder Operation gibt das Programm den Stand von b aus.

Die Klasse der Vorlage heißt A9_2, die Aufgabe verlangt A9_1. Wir nennen sie A9_1. Als Beispiel dient ein Lauf, der aus „Java“ und „Kurs“ über mehrere Operationen „Code“ macht; die Eingaben haben wir selbst gewählt.

Eine Festlegung treffen wir selbst: Bei „erste und letzte Position“ gehört die letzte Position mit zum Bereich. Die Vorlage lässt das offen; was daraus im Code folgt, zeigt Schritt 6.

Merke: Die Positionen in einem StringBuilder zählen ab 0: Das erste Zeichen steht auf Position 0.
  1. Die Vorlage lesen: Schleife, Menü, Einlesen des Codes.
  2. Variablen für die Eingaben deklarieren.
  3. Die Fälle in der Reihenfolge des Beispiellaufs ergänzen: anhängen, einfügen, ersetzen, Zeichen setzen, Zeichen lesen, Teilstring, löschen, falscher Code, beenden.

Was die Vorlage schon kann

        StringBuilder b = new StringBuilder();        boolean ready = false;        int opcode;
        while (!ready) {            Out.println("Bitte geben Sie den gewünschten Operationscode ein:");
            opcode = In.readInt();             switch (opcode) {
Sie erstellen und manipulieren schrittweise einen String.
Bitte geben Sie den gewünschten Operationscode ein:
0 -> Beenden.  Finaler String wird ausgegeben.
1 -> Anhängen: String angeben.
2 -> Einfügen: String und Position angeben.
3 -> Löschen:  Erste und letzte Position angeben.
4 -> Ersetzen: Erste und letzte Position und neuen String angeben.
5 -> Zeichen an Position ermitteln: Position angeben.
6 -> Zeichen setzen: Position und neues Zeichen angeben.
7 -> Substring ermitteln: Erste und letzte Position angeben.

Die Zeilennummern gehören zum fertigen Programm, nicht zur Vorlage. Unsere Deklarationen schieben alles nach unten: Die while-Schleife steht hier in Zeile 21 statt 17.

Zeile 5 legt den StringBuilder b an. new StringBuilder() erzeugt ihn leer, mit Länge 0. Anders als ein String lässt er sich danach verändern: Methoden wie append ändern b selbst, statt einen neuen Text zu erzeugen.

ready ist anfangs false. Die while-Schleife läuft, solange !ready wahr ist, also bis jemand ready auf true setzt. In jeder Runde gibt sie das Menü aus und liest mit In.readInt() den Code in opcode. Dann wählt switch (opcode) den passenden Fall; die Fälle fehlen noch.

Aus Skript 5, Folie 5-34 („Aufbauen von Strings …“): Ein StringBuilder ist „wie String, aber modifizierbar“. b.length() liefert die Zahl der Zeichen, b.toString() den Inhalt als String.
Aus Skript 4, Folien 4-30 und 4-33 („Ein-/Ausgabe“): In.readInt() liest eine ganze Zahl von der Tastatur, In.readWord() ein Wort bis zum nächsten Leerzeichen. Out.print schreibt ohne, Out.println mit Zeilenumbruch. In und Out sind Hilfsklassen der Vorlesung, keine Java-Standardklassen: In.java und Out.java müssen im selben Ordner liegen wie das Programm.

So beginnt jeder Lauf:

Variablen für die Eingaben

        String s;          // eingelesener oder ermittelter String        int pos;           // eine Position        int first, last;   // erste und letzte Position eines Bereichs        char ch;           // ein Zeichen

Das Menü sagt, was der Benutzer je Operation eingibt: einen String, eine Position, eine erste und eine letzte Position oder ein Zeichen. Für jede dieser Eingaben brauchen wir eine Variable. Sie stehen an der markierten Stelle der Vorlage, vor der Schleife: So gibt es sie einmal und jeder Fall kann sie benutzen.

VariableTypwofür
sStringString zum Anhängen, Einfügen, Ersetzen; Ergebnis von Code 7
posinteine Position (Codes 2, 5, 6)
first, lastinterste und letzte Position (Codes 3, 4, 7)
chcharein einzelnes Zeichen (Codes 5, 6)

char ist der Datentyp für genau ein Zeichen, etwa 'j' in einfachen Hochkommas.

Noch 11 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1

bleer, Länge 0
Legendevon der Operation betroffene PositionenDer StringBuilder b zu Beginn: noch kein Zeichen.