2008-10-25 6 views
2

Je ne suis pas sûr si le titre est très clair, mais fondamentalement ce que je dois faire est de lire une ligne de texte à partir d'un fichier et le diviser jusqu'à 8 variables de chaîne différentes. Chaque ligne aura les mêmes 8 morceaux dans le même ordre (titre, auteur, prix, etc). Donc, pour chaque ligne de texte, je veux finir avec 8 chaînes.Quelle est la meilleure façon d'avoir stringTokenizer diviser une ligne de texte en variables prédéfinies

Le premier problème est que les deux derniers champs de la ligne peuvent ou ne peuvent pas être présents, donc je dois faire quelque chose avec stringTokenizer.hasMoreTokens, sinon il mourra mal quand les champs 7 et 8 ne sont pas présents. Je voudrais idéalement le faire dans un moment de la boucle for, mais je ne suis pas sûr de savoir comment dire à cette boucle ce que l'ordre des champs va être afin qu'il puisse remplir toutes les 8 (ou 6) chaînes correctement. S'il vous plaît dites-moi, il y a une meilleure façon d'utiliser 8 instructions imbriquées!

EDIT: La solution String.split en fait définitivement partie, donc je vais l'utiliser à la place de stringTokenizer. Cependant, je ne suis toujours pas sûr de la meilleure façon d'alimenter les chaînes individuelles dans le constructeur. Est-ce que la meilleure façon d'avoir la classe attend un tableau, puis il suffit de faire quelque chose comme ça dans le constructeur:

line[1] = isbn; 
line[2] = title; 
+0

Nous avons besoin de voir un échantillon de vos données pour faire un choix éclairé. Avez-vous le contrôle sur le format de données? –

Répondre

3

La meilleure façon est de ne pas utiliser un StringTokenizer du tout, mais utiliser la méthode de chaîne split. Il renvoie un tableau de chaînes, et vous pouvez obtenir la longueur de cela.

Pour chaque ligne de votre fichier, vous pouvez effectuer les opérations suivantes:

String[] tokens = line.split("#"); 

tokens aura maintenant 6 - 8 cordes. Utilisez tokens.length() pour en savoir combien, puis créez votre objet à partir du tableau.

1

serait une expression régulière avec des groupes de capture pour vous? Vous pouvez certainement rendre certaines parties de l'expression facultatives.

Un exemple de ligne de données ou trois peut être utile.

0

Est-ce un fichier CSV ou similaire par hasard? Si oui, il y a des bibliothèques pour vous aider, par exemple Apache Commons CSV (lien vers des alternatives sur leur page aussi). Il vous obtiendra une chaîne [] pour chaque ligne du fichier. Vérifiez simplement la taille du tableau pour savoir quels champs optionnels sont présents.

Questions connexes