2010-11-29 5 views
1

Comment allez-vous procéder la chaîne suivante:Java Expression régulière à rechercher dans la chaîne

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

pour obtenir une liste de nœuds comme suggéré dans les réponses.

+0

Pour obtenir une liste des chaînes de caractères? Les valeurs entre p ('et')? Unique ou non unique? –

+0

Cela ne ressemble pas à une chaîne. Est-ce que c'est entre guillemets? – Skilldrick

+0

Quel est le résultat attendu que vous recherchez? Pouvez-vous donner la sortie exacte que vous voulez pour votre exemple que vous avez donné. –

Répondre

4

Cela dépend de la complexité des expressions. J'écrirais certainement un parseur approprié pour cela, puisque seulement alors je peux être sûr de l'avoir fait correctement. De plus, je vais analyser la chaîne dans un arbre de syntaxe abstraite de sorte qu'à la fin je vais avoir automatiquement un arbre d'objets bien modélisé:

class Node { ... } 

class StringLiteral extends Node { 
    public String getValue() { ... } 
} 

class Term extends Node { 
    public String getName() { ... } 
    public int getArity() { ... } 
    public Node getArgument(int index) { ... } 
} 
+0

Oui, vous avez raison. Mais maintenant, comment allez-vous analyser la chaîne pour obtenir ces nœuds ?? –

+0

L'idée de base est d'écrire une classe 'Parser' qui a une méthode par élément syntaxique qui vous intéresse. Je les appellerais' List parseArray() ',' Term parseTerm() ',' StringLiteral parseStringLiteral() ' , 'Node parseExpression()'. L'implémentation de 'parseArray' ressemblerait à' read ('[']); while (next()! = ']') {parseExpression(); } read (']'); ' Les méthodes contiennent essentiellement des séquences de ces opérations ou de grandes instructions de commutation, qui décident quoi analyser ensuite, en fonction du caractère suivant de l'entrée. –