Quel est le meilleur moyen de faire en sorte que stringTokenizer divise une ligne de texte en variables prédéfinies

StackOverflow https://stackoverflow.com/questions/236387

  •  04-07-2019
  •  | 
  •  

Question

Je ne suis pas sûr que le titre soit très clair, mais ce que je dois faire, en gros, c'est lire une ligne de texte dans un fichier et la scinder en 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 me retrouver avec 8 chaînes.

Le premier problème est que les deux derniers champs de la ligne peuvent être ou ne pas être présents. Je dois donc utiliser quelque chose avec stringTokenizer.hasMoreTokens, sinon il mourra en désordre si les champs 7 et 8 ne sont pas présents.

J'aimerais idéalement le faire en une boucle for, mais je ne sais pas comment dire à cette boucle quel sera l'ordre des champs pour qu'elle puisse remplir correctement les 8 (ou 6) chaînes. . S'il vous plaît, dites-moi qu'il existe un meilleur moyen que d'utiliser 8 déclarations imbriquées!

EDIT: La solution String.split semble en faire partie, je vais donc l’utiliser à la place de stringTokenizer. Cependant, je ne sais toujours pas quel est le meilleur moyen d’alimenter les chaînes individuelles dans le constructeur. Le mieux serait-il que la classe s’attende à un tableau, puis fait quelque chose comme cela dans le constructeur:

line[1] = isbn;
line[2] = title;
Était-ce utile?

La solution

Le meilleur moyen est de ne pas utiliser du tout StringTokenizer, mais d'utiliser le split . Il retourne un tableau de chaînes et vous pouvez en obtenir la longueur.

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

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

jetons auront désormais 6 à 8 chaînes. Utilisez tokens.length () pour déterminer combien, puis créez votre objet à partir du tableau.

Autres conseils

L'expression régulière est le moyen. Vous pouvez convertir votre chaîne entrante en un tableau de chaînes à l’aide de la méthode split

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split (java.lang.String)

Une expression régulière avec des groupes de capture fonctionnera-t-elle pour vous? Vous pouvez certainement rendre certaines parties de l'expression facultatives.

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

S'agit-il d'un fichier CSV ou d'un fichier similaire? Si tel est le cas, il existe des bibliothèques pour vous aider, par exemple Apache Commons CSV (lien vers des alternatives). sur leur page aussi). Vous obtiendrez une chaîne [] pour chaque ligne du fichier. Il suffit de vérifier la taille du tableau pour savoir quels champs optionnels sont présents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top