2010-08-18 9 views
0

Existe-t-il un meilleur moyen de lire des jetons dans un fichier java? J'utilise actuellement StringTokenizer pour scinder les jetons. Mais il peut être assez inefficace dans la plupart des cas car vous devez lire le jeton par jeton.Division de chaînes/jetons

Merci

+1

* "assez inefficace dans la plupart des cas car vous devez lire le jeton par jeton" *, comment aimeriez-vous le faire alors? Je veux dire, comment allez-vous "découvrir" vos jetons à l'exception de l'analyse de toute la chaîne d'entrée/flux? –

Répondre

3

Si vous regardez StringTokenizer dans l'API Java, vous remarquerez qu'il recommande une alternative:

StringTokenizer est une classe héritage qui est retenu pour des raisons de compatibilité bien que son utilisation est déconseillée dans le nouveau code . Il est recommandé que quiconque recherche cette fonctionnalité utilise la méthode split de String ou le package java.util.regex à la place.

Si aucune de ces options selon vos besoins, vous devriez jeter un oeil à Scanner, qui soutient également la recherche de motifs:

Scanner scanner= new Scanner(new File("example.txt")); 
    while (scanner.hasNextLine()) { 
     // do some stuff 
    } 
2

Je pense que la meilleure option et la plus souple pour cette classe est de SplitterGuava. Avec lui, vous avez beaucoup de contrôle sur la façon dont vous divisez une chaîne, et il renvoie un Iterable<String> des jetons résultant d'une scission. Vous n'avez pas vraiment spécifié exactement ce que vous voulez faire pour quel jeton de lecture par jeton est "inefficace", mais si vous préférez un List par exemple, vous pouvez simplement convertir le Iterable en une liste en utilisant Lists.newArrayList(Iterable) ou ImmutableList.copyOf(Iterable).

+0

cela a l'air bien, je l'aime +1 – ninesided

1

Vous devez ajouter plus de détails, mais les cas simples split fonctionne assez bien.

4

J'aime les StringUtils.split() dans les cours de Jakarta d'Apache. Il vous permet d'écrire du code comme ceci:

String[] splitStrings = StringUtils.split(unsplitString, "|"); 

Laissez vous éviter regex, et il traite des pointeurs nuls.