Wie lösche ich direkt aufeinanderfolgende doppelte Buchstaben in einem String (Java)?

3 Antworten

Solche Aufgaben sollen dich zum Denken bringen, nicht andere.

Überleg es dir schrittweise, bau es schrittweise, teste es schrittweise.

Du gehst zeichenweise durch den String und baust einen identischen neuen auf. Funktioniert das erstmal? Gut.

Dann: Wie erkennst du eine Dopplung? Nun, da wirst du dir wohl einen Zustand merken müssen. Schaffst du das? Gut.

Schlussendlich: Wie gehst du mit besonderen Situationen um: was ist, wenn der String leer ist oder nur 1 Zeichen enthält? Was ist, wenn eine Sequenz mehr als 2 Zeichen lang ist? Klappt dann alles, wie erwartet?

Wenn das klappt, überleg auch ganz andere Ansätze: wie sieht es mit regulären Ausdrücken aus? Ist Rekursion vielleicht sogar einfacher als Iteration? (Oder umgekehrt - die obigen Schritte lassen sich auf beide Weisen umsetzen.)


KingAmadeus 
Beitragsersteller
 14.10.2020, 20:24

Ich habe soweit alles, ich weiß nur nicht ganz was ich nach der if-Abfrage tun soll, bzw. wie ich den neuen String aufbaue.

0
alfredo153  14.10.2020, 20:25
@KingAmadeus
Ich habe soweit alles,

Oh, gut.

ich weiß nur nicht ganz was ich nach der if-Abfrage tun soll, bzw. wie ich den neuen String aufbaue.

Aha, also doch nicht.

Einen neuen String kannst du mit dem Operator + oder (effizienter) mit einem StringBuilder aufbauen.

0

Ich würde folgende Vorschrift aufstellen:

  1. Gehe jedes Zeichen (an der Stelle i) des Strings durch
  2. Schaue, ob an der Stelle i+1 das gleiche Zeichen stehe
  3. Falls ja: Entferne das i+1-te Zeichen
  4. Mache mit dem Zeichen an der (neuen) i+1-ten Stelle weiter.
  5. Wenn es kein i+1-tes Zeichen gibt, ist die Funktion zuende.

Das ist natürlich keine fertige Lösung, sollte sich aber gut in Java-Code übertragen lassen. :-) Fertige Lösungen gebe ich in der Regel nicht, denk ruhig auch ein bisschen selbst nach.

Woher ich das weiß:Berufserfahrung – Software-Entwicklung (Java Enterprise)

KingAmadeus 
Beitragsersteller
 14.10.2020, 20:25

Ich habe soweit alles, ich weiß nur nicht ganz was ich nach der if-Abfrage tun soll, bzw. wie ich den neuen String aufbaue. Deine Antwort sollte trozedem reichen, Danke :)

0
String a(String str){return str.replaceAll("(.)\\1+","$1");}

Du musst nur noch rausfinden, wie man das aufruft und vermutlich auch, was die Methode genau macht.


KingAmadeus 
Beitragsersteller
 15.10.2020, 21:27

Replace darf ich nicht verwenden, nur Methoden der Stringklassen. Trotzdem danke :)

0
daCypher  16.10.2020, 08:10
@KingAmadeus

ReplaceAll ist eine Methode der String Klasse. Api Link

Alternativ kannst du es natürlich auch so machen, wie die anderen es vorgeschlagen haben. Dass du in einer Schleife jedes einzelne Zeichen durchgehst und prüfst, ob es das gleiche, wie das nächste Zeichen ist und es dann halt nicht ins Ergebnis einfügst.

0