Je semble lutter avec le scanner lors de la lecture d'un fichier d'entrée. J'apprends toujours les cordes de Java et j'apprécierais que quelqu'un puisse m'aider.
Ma méthode principale est supposée lire un fichier d'entrée et en fonction de la première lettre de la ligne suivante. ou un objet d'image qui est ensuite ajouté à un tableau de la classe de type SUPPER. Voici une partie de mon code de lecture du fichier d'entrée: p>
3 Réponses :
Vous devez ajouter puis pour gérer les espaces supplémentaires autour du nombre, voici 2 options: p>
Utilisez le délimiteur Utilisez le délimiteur \ n code> dans le délimiteur, car sinon ce n'est pas, avec le numéro, jusqu'à la prochaine
: code> qui est la ligne suivante / p> li>
"[: \\ n]" code> et
long.parelong (in.Suivant (). Trim ()) code>: vous lire des espaces mais retirez-les avant l'analyse p> li>
"\ s *: \ s * | \ n" code> et conserver
in.nextlong () code>: vous ne lirez pas les espaces et être directement capable de lire un
double code> p> li>
ol> li>
ol>
Merci! La deuxième ovoyée fonctionne parfaitement. C'est quelque chose que je n'ai pas encore appris alors je vais certainement examiner
La solution de vos problèmes réside dans la modification du délimiteur à: Si vous essayez cet exemple ci-dessous, il ne lancera pas une exception sur in.NextLong () Code>: P>
public static void main(String[] args) {
String example = "S : Pink Bullets.mp3: The Shins :Chutes Too Narrow : 105276041\n" +
" I : CatamaranCruise#2.JPG : 462 : 2010 : 33921\n" +
" S : 16 Military Wives.mp3: The Decemberists :Picaresque : 431760781\n" +
" S : Saint Simon.mp3: The Shins :Chutes Too Narrow : 349515394\n" +
" S : Sweet Disposition.mp3: The Temper Trap :Conditions : 45810162\n" +
" I : CyberPatriotRound3.JPG : 752 : 2011 : 25518\n" +
" I : 15192479739_d343588b32_o.jpg : 1652 : 2014 : 250959";
Scanner in = new Scanner(example).useDelimiter("\\s*:\\s*|\n");
String fileType;
String fileName;
String artistName;
String albumName;
long fileSize;
while(in.hasNextLine()) {
fileType = in.next().trim();
if (fileType.equals("S")) {
fileName = in.next().trim();
artistName = in.next().trim();
albumName = in.next();
fileSize = in.nextLong(); //when it gets to this line, it gives a InputMisMatchException
}
}
}
Une alternative pourrait être d'utiliser Regex pour le tout. Je suis conscient que ce n'est peut-être pas ce que vous avez demandé, mais juste une idée. Peut également être hors de votre zone de confort.
une regex à la recherche de quelque chose comme: p> si correspondez, extrayez simplement les groupes de capture. P> P>
Essayez
FileSize = long.parelong (in.Suivant (). Trim ()) code> en raison des espaces restants.