2010-12-10 19 views
0

je dois tokenizer la chaîne suivantedélimiteurs consécutifs dans StringTokenizer

12/12/2010:{content1:[{xyz,abc}],13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb}]}] 

Je nee de diviser la chaîne ci-dessus si elle a}] consequtively. Donc, j'ai fait,

String[] tokens = null; 
StringTokenizer csvToken = new StringTokenizer(csvString,"]}"); 
tokens = new String[csvToken.countTokens()]; 
int tmp = 0; 
while(csvToken.hasMoreTokens()) { 
    tokens[tmp++] = csvToken.nextToken(); 
} 

Mais ce n'est pas tokenizing comme je m'y attendais.

12/12/2010:{content1:[{xyz,abc 
,13/12/2010:{content2:[{xyz,abc 
,{content3:[{aa,bb 

Mais ce que je pense était,

12/12/2010:{content1:[{xyz,abc 
,13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb 

comment pourrais-je faire que le code fonctionne comme prévu?

Répondre

3

qu'en est-il de String.split (String regex)?

String toDo = "12/12/2010:{content1:[{xyz,abc}],13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb}]}]"; 
String[] splitted = toDo.split("\\}\\]"); 
for (String s : splitted) { 
    System.out.println(s); 
} 
+0

J'ai essayé avec cela aussi, ne fonctionnait toujours pas. :-) – i2ijeya

+0

pas? Ce code exact a fonctionné pour moi comme prévu. Par exemple. deux résultats – d1x

+0

@ d1x, vous devez ajouter le dernier 's' au précédent' splitted'. Voir la sortie ** attendue ** sur la question. –

1

Ok, voyant qu'il n'y a pas encore de réponse, mon « solution rapide » sont les suivantes:

import java.util.StringTokenizer; 

public class Test { 

public static void main(String[] args) { 
    String csvString = "12/12/2010:{content1:[{xyz,abc}],13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb}]}]"; 

    String[] tokens = null; 
    StringTokenizer csvToken = new StringTokenizer(csvString,"]}"); 
    tokens = new String[csvToken.countTokens() - 1]; 
    int tmp = 0; 
    while(csvToken.hasMoreTokens()) { 
    tokens[tmp++] = csvToken.nextToken(); 
    if (tmp == tokens.length) { 
    tokens[tmp - 1] += csvToken.nextToken(); 
    } 
    } 

    for (String token : tokens) { 
    System.out.println(token); 
    } 

} 
} 

Personnellement, je vais utiliser la méthode String.split() et utiliser ma solution « idée » comme ci-dessus. Ou, si vous êtes courageux, utilisez des expressions régulières.

PS code testé et travaillé ....

Sortie:

12/12/2010: {content1: [{xyz, abc
13/12/2010: {content2: [{xyz, abc, {content3: [{aa, bb

+0

Merci Elite. Cela fonctionne aussi bien. – i2ijeya