Need Help mit String :/

freakyblue

Mitglied
die frage klingt vllt etwas doof, aber ich habe folgendes problem:

ich habe einen text als string und muss diejenigen wörter, die in doppelt eckigen klammern sind alle in eine liste speichern. hoffe ihr könnt mir helfen. :bahnhof:
also zb. folgendes:

blabla bla blablabla [[blubb]] blabla bla bla. Bla bla blabla [[blip]] [[blop]] blablabla blabla bla.

nun sollte ich blupp, blip, und blop in eine liste speichern, aber wie???? ;(
 
ich habe einen text als string und muss diejenigen wörter, die in doppelt eckigen klammern sind alle in eine liste speichern. hoffe ihr könnt mir helfen. :bahnhof:
also zb. folgendes:

blabla bla blablabla [[blubb]] blabla bla bla. Bla bla blabla [[blip]] [[blop]] blablabla blabla bla.

nun sollte ich blupp, blip, und blop in eine liste speichern, aber wie???? ;(

Du kannst hier unterschiedlich rangehen.

Möglichkeit 1:
Code:
Gehen deinen String Zeichen für Zeichen durch, achte auf "[" wenn du 2x hintereinander eine gefunden hast startet ein neues Wort zum Speichern. 
(solange bis 2 "]" hintereinander gefunden wurden)

Möglichkeit 2:
Code:
Wenn alle Wörter durch Leerzeichen getrennt sind, kannst du den String splitten und bekommst als Ergebnis ein Array zurück. 
Diese Array gehst du durch und überprüfst jeden darin enthaltenen String ob er mit "[[" beginnt und mit "]]" endet.

Mögichkeit 3:
Code:
Du suchst dir den Index vom 1.Vorkommen von "[[" und "]]" alles dazwischen gehört zu einem Wort. Danach verkleinerst du den String per substring.

Möglichkeit 4:
Code:
Per Regex einfach die gesuchten Strings suchen lassen.

Möglichkeit 1 kann kompliziert werden
Möglichkeit 2 wäre die einfachste Art (aber fehleranfällig wenn leerzeichen in einem zu speichernden String stehen)
Möglichkeit 3 ebenfalls kompliziert und fehleranfällig (da man gut überlegen muss wegen den Index)
Möglichkeit 4 ist die schönste Art aber für Anfänger wegen Regex auch die schwierigste
 
Zuletzt bearbeitet:
Huhu,

ich hab mal kurz ein passendes Regex gemacht.

Wenn du selbst etwas lernen möchtest, dann guckst du auf Regexe, dort kannst du die Regex testen und dann einfach in deinen Java-Code einfügen.

Ansonsten habe ich hier die Regexlösung:
Wenn die Klammern nicht leer sein dürfen: \[\[\w+\]\]
Wenn die Klammern leer sein dürfen: \[\[\w*\]\]
Den Java-Code bekommst du sicherlich auch allein hin!
 
Zuletzt bearbeitet:
Huhu,

ich hab mal kurz ein passendes Regex gemacht.

Wenn du selbst etwas lernen möchtest, dann guckst du auf Regexe, dort kannst du die Regex testen und dann einfach in deinen Java-Code einfügen.

Ansonsten habe ich hier die Regexlösung:
Wenn die Klammern nicht leer sein dürfen: \[\[\w+\]\]
Wenn die Klammern leer sein dürfen: \[\[\w*\]\]
Den Java-Code bekommst du sicherlich auch allein hin!


DANKE für die schnellen antworten 🙂
habe noch nie regexe benutzt, werde mich mal versuchen einzulesen...
das mit dem regex scheint mir wirklich die beste lösung zu sein, nur dürfte das [[wort in den klammern]] auch aus mehrern wörtern mit leerzeichen bestehen :/
 
Da schließt dann meine Möglichkeit 2 aus, außer man optimiert sie etwas 😀
Ich glaube du solltest zuerst mal eine Möglichkeit ohne Regex probieren, funktioniert diese kann man sich an eine Version mit Regex setzen.

Der Vorteil: Sollten Regex doch noch etwas zu komplex sein hast du wenigstens eine Lösung im Ärmel 😉
Regex vereinfachen viele Sachen, können dabei aber auch komplexer werden. So das eine Mischungs aus String Manipulation und Regex das einfachste ist.
 
Da schließt dann meine Möglichkeit 2 aus, außer man optimiert sie etwas 😀
Ich glaube du solltest zuerst mal eine Möglichkeit ohne Regex probieren, funktioniert diese kann man sich an eine Version mit Regex setzen.

Der Vorteil: Sollten Regex doch noch etwas zu komplex sein hast du wenigstens eine Lösung im Ärmel 😉
Regex vereinfachen viele Sachen, können dabei aber auch komplexer werden. So das eine Mischungs aus String Manipulation und Regex das einfachste ist.


Habe es jz einmal mit einer for-each und einer if verschachtelt gelöst. aber mit regex sieht es schon besser aus :rtfm:

sollte ja dann in etwa so aussehen:

Java:
String[] links = input.toLowerCase().split("\[\[\w*\s*\w*\]\]");
			return Arrays.asList(links);

escape sequenz stimmt nicht... kann mir nochmals jmd helfen? 🙂)
 
Habe es jz einmal mit einer for-each und einer if verschachtelt gelöst. aber mit regex sieht es schon besser aus :rtfm:

sollte ja dann in etwa so aussehen:

Java:
String[] links = input.toLowerCase().split("\[\[\w*\s*\w*\]\]");
			return Arrays.asList(links);

escape sequenz stimmt nicht... kann mir nochmals jmd helfen? 🙂)


Wobei du bei \[\[\w*\s*\w*\]\] auch nur "[[bla bla]]" und nicht "[[bla bla bla]]" abfängst.

Eine Lösung bei beliebig vielen wörtern findest du weiter unten!
(Wieder wegen Lerneffekt selbst probieren, ob du's hinbekommst, ansonsten nachschauen )

Regex: \[\[[\w\s]*\]\]
Erklärung: Durch die eckige Klammer wird das \w (Buchstabe oder Zahl) ODER ein \s (Leerzeichen) gesucht, der Stern deutet auf 0 oder mehr von diesen zwei Möglichkeiten!
 
Zuletzt bearbeitet:

Zurück
Oben