Sorte d'un noob Java, et avoir retourné entre environ 6 flux différents + scanner et n'ont toujours pas trouvé un moyen de faire tout ce dont j'ai besoin. Je suis en train d'essayer d'implémenter un algorithme pour analyser un fichier qui suit une certaine syntaxe. Il y a plusieurs endroits où je dois jeter un coup d'œil au caractère suivant pour voir s'il s'agit d'une parenthèse ou d'une virgule, et aussi pour pouvoir lire les chaînes et les valeurs décimales. Je l'ai eu travailler avec un flux jusqu'à ce que j'ai essayé de lire le double. Le double n'est PAS dans un format binaire, donc DataInputStream n'est pas ce que je veux.Analyser des données mélangées avec Java
je pourrais utiliser le scanner pour son getNextFloat, mais le problème avec l'aide d'un scanner est il n'y a pas délimiteurs réel dans le fichier: (test:1.234,rightTest:5.6789)
Si je précise (
,
:
)
comme délimiteurs avec le scanner, je perdre la capacité de tester leur existence du délimiteur (I thionk, car il semble qu'il mange le délimiteur). Ces blocs peuvent être imbriqués les uns dans les autres de différentes manières, j'ai donc souvent besoin de tester le caractère suivant pour voir s'il s'agit d'une parenthèse ouvrante, puis de passer à différentes parties de la logique. C'est à dire. il forme un arbre (mais s'il vous plait, ne code pas correctement pour analyser un arbre car c'est mon devoir).
Je pourrais faire disparaître le scanner et retourner à ma solution d'origine avec un flux si je pouvais seulement comprendre comment analyser la valeur décimale. J'ai besoin de quelque chose qui fait un "lire jusqu'à ce que vous trouviez un de ces caractères" pour que je puisse dire stream.ReadUntil (",)"). Les décimales sont toujours suivies d'une virgule ou d'une parenthèse de fermeture. Comme un hack, je vais probablement lire un char à la fois. C'est la même chose que j'ai fait pour attraper la corde comme "test" et "rightTest", et c'était vraiment horrible. La seule autre option que je connais est quelque chose avec un tokenizer de chaîne, mais mon sentiment à partir des exemples est que je devrais lire le fichier entier dans une chaîne pour le marquer, en défiant essentiellement le but d'utiliser un flux. Ces fichiers peuvent être vraiment gros et juste comme exersize pour moi-même j'aime essayer de coder de telle sorte que je ne mets pas tout en mémoire si c'est inutile, même si pour cette tâche ce n'est pas vraiment important.
donc essentiellement ce que je cherche un peu d'aide sur les mécanismes du fichier IO pour pouvoir jeter un regard au caractère suivant je peux vérifier (
,
:
)
quand necesary, et ont également la capacité de lire une chaîne jusqu'à un :
et lire une valeur décimale jusqu'à un :
ou )
= fournissez un échantillon de votre fichier –