2009-06-30 8 views
0

Je la chaîne suivante avec délimiteurs séparés qui doit être analysé dehors et je suis en cours d'exécution dans un peu d'un mur à l'heure actuelle.Java - Parse une chaîne multi délimité/dimensions

exemple:

catégorie 1 --- catégorie 2; sous-groupe 1 || sous-groupe 2 --- sous-groupe 1, la valeur 1 || --- valeur2 valeur 3

je voudrais à ré-arranger dans le groupe suivant:

catégorie 1; sous-groupe 1; valeur1; sous-groupe 2, la valeur 2; catégorie 2; sous-groupe 1; valeur1

Le délimiteur "---" sépare une catégorie et ses valeurs. Le "||" délimiteur sépare les champs appartenant à la même catégorie Le ";" délimiteur sépare les types de champs (catégorie, sous-groupe, valeur) Il peut y avoir N catégories dont ils peuvent avoir N sous-groupes.
Chaque valeur est associée 1: 1 à son sous-groupe

Le premier passage fonctionne correctement, mais une fois que j'ai atteint la catégorie 2, tout est nul. Je sais qu'il me manque quelque chose d'évident mais je suis un peu brumeux en ce moment et Java n'est pas ma langue maternelle. Voici ce que j'ai jusqu'à présent (sans délimiteurs)

StringBuilder result = new StringBuilder(); 
String categoryArray[] = category.split("---"); 
String subGroupArray[] = subgroup.split("---"); 
String valueArray[] = value.split("---"); 

for (int counter=0; counter<categoryArray.length;counter++){ 


    String categoryArray2[] = categoryArray[counter].split("\\|\\|"); 
    String subGroupArray2[] = subGroupArray[counter].split("\\|\\|"); 
    String valueArray2[] = valueArray[counter].split("\\|\\|"); 

     result.append(categoryArray[counter].trim()); 
    for (int counter2=0; counter2<subGroupArray2.length;counter2++){ 

     result.append(subGroupArray2[counter2].trim()); 
     result.append(valueArray2[counter2].trim()); 

    } 
    result.append("||"); 

} 
return result; 



Toute aide ou approches optimisées seraient certainement appréciées!

+0

Quelles sont les valeurs réelles de la catégorie, sous-groupe, et de la valeur? – stevedbrown

+0

Je ne peux pas comprendre les relations prévues entre les catégories, sous-groupes et valeurs et comment votre convention de notation les exprime dans la première chaîne. Pouvez-vous préciser dans votre question? –

+0

Je vais essayer de clarifier un peu les relations. – godel

Répondre

0

Votre algorithme est fondamentalement bon. Le problème est que String.split() fonctionne avec des regexes en entrée, pas une chaîne. Donc "||" ne signifie pas la chaîne "||", cela signifie tout ce que l'expression régulière signifie. remplacer Donc ceci:

subGroupArray[counter].split("||"); 

Avec:

subGroupArray[counter].split("\\|\\|"); 

Et cela devrait fonctionner.

+0

Vous avez raison, j'ai oublié ça | est un métacaractère et je ne lui ai pas échappé correctement. Merci beaucoup. L'algorithme échoue toujours lors de la seconde passe et passe les valeurs null. – godel

+0

En fait, il y avait une anomalie dans les données en aval qui a fini par jeter mes erreurs. Tout est réparé maintenant et l'algorithme fonctionne bien. Je vais vous récompenser comme je l'aurais probablement cogné la tête un peu plus tard. – godel

+0

Je l'ai eu en utilisant le même code, mais j'ai dû remplir les définitions de 'category',' subgroup' et 'value' puisque vous n'avez pas donné de toute façon. J'ai utilisé les valeurs de 'input.split ("; "))'. – jameshales

0

Commencez par écrire quelques tests JUnit compte tenu de l'entrée comme une chaîne, et la structure de sortie que vous attendez. Collez l'ensemble de la classe de test ici, avec votre implémentation défaillante.