2011-06-08 2 views
5

i ont une chaîne comme ci-dessousdécoupant une chaîne en utilisant délimiteurs

a > b and c < d or d > e and f > g 

résultat doit être:

a > b 
and 
c < d 
or 
d > e 
and 
f > g 

je veux diviser la chaîne à occurrences de « et », « ou » et récupérer les delims aussi bien avec le jeton. [ai-je besoin afin d'évaluer l'expression]

i essayé d'utiliser StringTokenizer comme

new StringTokenizer(x, "\\sand\\s|\\sor\\s", true); 

mais je n'obtiens pas le résultat souhaité. i essayé d'utiliser le scanner comme

Scanner sc = new Scanner(x); 
     sc.useDelimiter("and | or"); 

c'est en mesure de diviser, mais ne marche pas retourner les délimiteurs.

veuillez suggérer.

J'ai donné a, b, c ci-dessus mais il y a des mots au lieu de a, b, c avec des espaces. Exemple mis à jour.

+0

Votre description implique l'utilisation de la Chaînes "et" & "ou" comme délimiteurs, mais votre sortie implique "" comme délimiteur. Précisez s'il vous plaît. – djg

+0

doh! Je donne un mauvais exemple sous forme de chaîne..Pour moi fournir un autre exemple – jch

+0

http://stackoverflow.com/questions/3777546/how-can-i-split-a-string-in-java-et-retain-the-delimiters – JustinKSU

Répondre

2
String delim = " "; 
String[] splitstrings = yourString.split(delim); 
for (int i = 0; i < splitstrings.length(); i++) { 
    splitstrings += delim; 
} 
+0

OP veut aussi que les delims soient retournés. 'split' ne retournera pas de delims. – CoolBeans

+0

je ddint expliquer clairement .. j'ai mis à jour l'exemple maintenant. – jch

+0

désolé, mais je ne pense pas que c'est bon .. – jch

2

Qu'est-ce que vous voulez vraiment est un outil comme JFlex le temps que vous exécutez dans toutes les différentes permutations des espaces blancs et que votre syntaxe grandit. À long terme, vous gagnerez du temps.

3

Ceci se divisera sur "et" ou "ou" avec n'importe quel nombre d'espaces entourant les mots.

String test = "2 < 3 and 3 > 2 or 4 < 6 and 7 < 8"; 

    String [] splitString = test.split("\\s*[and|or]+\\s*"); 
    for(int i = 0; i < splitString.length ; i ++){ 
     System.out.println(splitString[i]); 
    } 

sortie

2 < 3 
3 > 2 
4 < 6 
7 < 8 
+0

comment obtenir le délimiteur ainsi? – jch

0

A StringTokenizer est la seule classe Java standard qui est capable de retourner le délimiteur utilisé aussi bien pour autant que je suis au courant. Il suffit de copier l'expression rationnelle de l'Ancien Testament, en supposant qu'il fera ce qu'il veut (qui, deuxième coup d'œil, je extrêmement doute de sa description textuelle, mais oh bien - il suffit d'insérer la droite)

String input = "a > b and c < d or d > e and f > g"; 
    StringTokenizer tokenizer = new StringTokenizer(input, "\\sand\\s|\\sor\\s", true); 
    while (tokenizer.hasMoreTokens()) { 
     System.out.println(tokenizer.nextToken()); 
    } 
Questions connexes