0
votes

NextLong () ne pas être lu avec l'utilisation de délimiteur

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: xxx


1 commentaires

Essayez FileSize = long.parelong (in.Suivant (). Trim ()) en raison des espaces restants.


3 Réponses :


0
votes
  1. Vous devez ajouter \ n dans le délimiteur, car sinon ce n'est pas, avec le numéro, jusqu'à la prochaine : qui est la ligne suivante / p>

  2. puis pour gérer les espaces supplémentaires autour du nombre, voici 2 options:

    1. Utilisez le délimiteur "[: \\ n]" et long.parelong (in.Suivant (). Trim ()) : vous lire des espaces mais retirez-les avant l'analyse

    2. Utilisez le délimiteur "\ s *: \ s * | \ n" et conserver in.nextlong () : vous ne lirez pas les espaces et être directement capable de lire un double


1 commentaires

Merci! La deuxième ovoyée fonctionne parfaitement. C'est quelque chose que je n'ai pas encore appris alors je vais certainement examiner



0
votes

La solution de vos problèmes réside dans la modification du délimiteur à: xxx pré>

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
        }
    }
}


0 commentaires

0
votes

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: xxx

si correspondez, extrayez simplement les groupes de capture.


0 commentaires