2010-11-29 12 views
1

Wie werden Sie die folgende Zeichenfolge vorgehen:Java Regular Expression in String suchen

[p('WHITE'),p('GREEN'),p('GREEN','RED'),p('GREEN','YELLOW'),p('GREEN','YELLOW','RED')] 

eine Liste von Knoten zu erhalten, wie in den Antworten vorgeschlagen.

+0

Um eine Liste der Strings zu erhalten? Die Werte zwischen p ('und')? Einzigartig oder nicht einzigartig? –

+0

Das sieht nicht wie eine Zeichenfolge aus. Ist es in doppelte Anführungszeichen eingeschlossen? – Skilldrick

+0

Was ist die erwartete Ausgabe, nach der Sie suchen? Können Sie für das Beispiel, das Sie angegeben haben, die genaue Ausgabe angeben? –

Antwort

4

Es hängt davon ab, wie komplex die Ausdrücke werden können. Ich würde definitiv einen richtigen Parser dafür schreiben, denn nur dann kann ich sicher sein, es richtig gemacht zu haben. Außerdem werde ich die Zeichenfolge in eine abstrakte Syntaxstruktur analysieren, so dass ich am Ende automatisch einen schön modellierten Baum von Objekten haben werde:

+0

Ja, Sie haben Recht. Aber jetzt, wie wirst du die Zeichenfolge analysieren, um diese Knoten zu bekommen? –

+0

Die Grundidee ist, eine 'Parser'-Klasse zu schreiben, die eine Methode pro syntaktisches Element hat, an der Sie interessiert sind. Ich würde sie' List parseArray() ',' Term parseTerm() ',' StringLiteral parseStringLiteral() 'nennen , 'Node parseExpression()'. Die Implementierung von 'parseArray' würde ungefähr wie 'read (' [']) aussehen; while (next()! = ']') {parseExpression(); } lesen (']'); '. Die Methoden enthalten im wesentlichen Sequenzen dieser Operationen oder große Schalteranweisungen, die entscheiden, was als nächstes zu analysieren ist, abhängig vom nächsten Zeichen aus der Eingabe. –