Ich brauche wie so Strings aus verschachtelten Klammern zu extrahieren:Extract String in verschachtelten Klammern
[ this is [ hello [ who ] [what ] from the other side ] slim shady ]
Ergebnis (Reihenfolge spielt keine Rolle):
This is slim shady
Hello from the other side
Who
What
Hinweis könnte die Zeichenfolge haben N Klammern, und sie werden immer gültig sein, aber möglicherweise verschachtelt sein oder nicht. Außerdem muss die Zeichenfolge nicht mit einer Klammer beginnen.
Die Lösungen, die ich online zu einem ähnlichen Problem gefunden habe, schlagen eine Regex vor, aber ich bin nicht sicher, dass es in diesem Fall funktionieren wird.
ich dies der Umsetzung ähnlich wie dachte, wie wir, ob ein String überprüfen alle gültigen Klammern hat:
Spaziergang durch den String. Wenn wir a sehen [wir schieben seinen Index auf den Stapel, wenn wir a sehen], teilen wir uns von dort zum aktuellen Punkt.
Allerdings müssten wir diese Teilzeichenfolge aus der ursprünglichen Zeichenfolge löschen, damit wir sie nicht als Teil eines der Ausgaben erhalten. Anstatt also nur den Index in den Stapel zu schieben, dachte ich daran, eine LinkedList zu erstellen, und wenn wir einen [wir fügen diesen Knoten auf der LinkedList ein. Dies ermöglicht uns, die Teilzeichenfolge aus der LinkedList zu löschen.
Wäre dies ein guter Ansatz oder gibt es eine sauberere, bekannte Lösung?
EDIT:
'[ this is [ hello [ who ] [what ] from the other [side] ] slim shady ][oh my [g[a[w[d]]]]]'
Sollte Rückkehr (Reihenfolge spielt keine Rolle):
this is slim shady
hello from the other
who
what
side
oh my
g
a
w
d
Weiß Räume sind nicht wichtig, dass trivial ist danach zu entfernen. Es kommt darauf an, die verschiedenen Inhalte innerhalb der Klammern unterscheiden zu können. Entweder durch Trennung in neue Zeilen oder durch eine Liste von Strings.
Dies ist eine nette schwierige Frage, ich will es lösen Rekursion verwenden, aber das ist vielleicht ein wenig schwierig sein :) –
voran gehen und versuchen them'all .. – Sundeep
was ist das anfängliche Konstrukt mit den Klammern? Nur eine Zeichenfolge wie 'astring =" [das ist [Hallo [wer] [was] von der anderen Seite] schlank schattig] "'? Wenn ja, warum nicht einfach astring.replace (']', '') ',' astring.replace ('[', '') 'und dann' astring.split() '? –