Einer Methode wird nur der Wert String und Character übergeben. Nun wird im String rekursiv nach dem übergebenen Character gesucht. Wenn gefunden, dann wird dieser Character verdoppelt und ein neuer String ausgegeben. Zusätzlich soll die Anzahl der Verdoppelung angehängt werden. Wie schaffe ich es aber nun, am Ende des Strings statt z.B. ABC1111 -> ABC4 ausgegeben zu bekommen. Schleifen dürfen nicht verwendet werden. Der Methodenkopf darf auch nicht verändert werden.
Du könntest die Länge des Strings vor und nach dem Verlängern (allen Verlängerungs-Operationen) vergleichen und den Unterschied schließlich an den String anhängen.
Weil in der String-Verbindungs-Operator Plus in Java eine Konvertierung beliebiger Typen nach String vornimmt, musst Du nicht mal den int-Unterschiedswert nach String konvertieren.
Es ginge auch innerhalb der Rekusion. Z.B. dem Rekusionsstring bei jeder Zeichenverdopplung ein bestimmtes Character (welches ansonsten nicht vorkommen darf) anhängen.
Abbruchbedingung ist, wenn der String mit diesem Zeichen beginnt. Die Anzahl der Verdopplungen entspricht dann der Stringlänge.
Läuft der String leer, ohne dass dieses Zeichen auftritt, ist die Anzahl 0.
Mich würde die genaue Formulierung der Aufgabe interessieren. Oder geht es nur mir so, dass die Aufgabe wenig durchdacht scheint?
Die Lösungen sind halt alles andere als perfekt. Wer sagt, dass die Zeichenkette nicht eine Zahl am Ende hat? Und ein String könnte auch ein NUL beinhalten (wobei das schon deutlich unwahrscheinlicher ist)
Edit: Nicht aufgepasst, was die Autokorrektur angestellt hat bei "alles andere als"
Und der reguläre Ausdruck könnte Probleme haben weil das .* greedy sein dürfte und bei Zahlen mit mehr wie einer Ziffer diese "klauen" dürfte. Das müsste man einmal testen.
Es sollte aber doch von Links nach Rechts abgearbeitet werden. Daher wäre meine Erwartung, dass das .* gewinnt. Und auf regex101 scheint sich dies zu bestätigen.
Doch, deine Version hat eine ähnliche Einschränkung, denn am Ende des übergebenen Strings darf keine Zahl vorkommen.
Damit hast Du sichtbare Zeichen, die regelmäßig vorkommen in Texten während NUL in der Regel nicht vorkommt, da es einfach kein sichtbares Zeichen ist. Aber da es ein erlaubtes Zeichen ist, hat man rein theoretisch noch ein Problem.
Ein D800 - DBFF ist ungültig, wenn kein Zeichen aus dem Bereich DC00-DFFF folgt. Damit wäre D800 als Zeichen am Ende eine Möglichkeit. Und der Check wird erweitert ob nach dem D800 das String zu Ende ist oder ein D800 folgt.
Damit wäre diese Variante dann sicher, so man davon ausgeht, dass nur gültige Strings vorkommen. Man müsste es aber ausprobieren - nicht dass Java eine Validierung hat. Davon gehe ich aber erst einmal nicht aus. Es dürfte einfach eine Reihe an Codepoints sein.
Die genaue Aufgabenstellung wäre da schon mal interessant. In dem Zusammenhang natürlich auch die Methodensignatur und der Rückgabetyp. Mir ist aus dem Eingangspost noch nicht mal im Ansatz klar, was die Methode eigentlich genau machen soll: Zeichen sollen verdoppelt werden, dabei soll ein neuer String ausgegeben werden - dann soll aber irgendwas von ABC1111 nach ABC4 transformiert werden, weil zusätzlich die Zahl der Verdoppelungen angehängt werden soll. Das ist mir alles zu wirr.
Die genaue Aufgabenstellung wäre da schon mal interessant. In dem Zusammenhang natürlich auch die Methodensignatur und der Rückgabetyp. Mir ist aus dem Eingangspost noch nicht mal im Ansatz klar, was die Methode eigentlich genau machen soll: Zeichen sollen verdoppelt werden, dabei soll ein neuer String ausgegeben werden - dann soll aber irgendwas von ABC1111 nach ABC4 transformiert werden, weil zusätzlich die Zahl der Verdoppelungen angehängt werden soll. Das ist mir alles zu wirr.
Ja, ich war da auch etwas am rätseln. Ich vermute ja, dass er mit dem ABC1111 einfach nur meinte, dass er da halt 1er angefügt hat an die Zeichenkette (symbolisch einfach als ABC bezeichnet) und das mag er nicht. Statt dessen will er eine 4 statt eben den 4 einzelnen 1er.
Aber ich vermute auch, dass da noch ein Rückgabetyp sein dürfte. Und dann könnte man den evtl. verwenden. Aber selbst da wäre die Fragestellung noch: Wenn ich die Anzahl der Ersetzungen zurück gebe, dann habe ich das als Rückgabewert aber noch nicht ausgegeben.
Schon in #6 habe ich daher das alles hinterfragt - denn ich sehe nicht, was bei dem, was man hier dann unter dem Strich verstanden und als Lösung angeboten hat, lernen oder vertiefen soll. Daher ist es schade, dass die genaue Aufgabe nicht mitgeteilt wurde.