Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724

    [java] string tokenizer

    ho un piccolo problema con il tokenizer. Ho implementato questo codice
    La stringa s contiene:
    1001 verde 2.00 0.50 2 4 08:00 12:00 14:00 18:00
    Dopo aver eseguito il codice mi restituisce un elemento si e uno no della riga

    tempVerde
    temp0.50
    temp4
    temp12:00
    temp18:00

    Come faccio ad evitarlo???

    CODE
    String temp="";
    String s=LeggiDaFile(0);
    StringTokenizer st = new StringTokenizer(s," ", false);
    while (st.hasMoreTokens()) {
    temp=st.nextToken();
    System.out.println("temp"+st.nextToken());
    }
    /CODE

  2. #2
    Problemino facile facile da risolvere.
    Nel tuo codice chiami 2 volte il metodo st.nextToken(). Entrambi consumano un token quindi il tuo output ne mostra uno sì e uno no.
    Inoltre questo codice lancia un'eccezione se i token sono dispari.

    La soluzione è sostituire le 2 righe nel while con:
    codice:
    temp=st.nextToken(); 
    System.out.println("temp"+temp);
    E se posso permettermi... usa uno strumento di sviluppo che ti permette di fare il debug senza troppi System.out.println("debug").

    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724

    [java] tokenizer

    ok ma se la funzione è questa il problema si ripropone, ogni tanto salta alcuni valori partendo dal primo
    codice:
    int i=1;
     String temp="";
       String s=LeggiDaFile(0);
       StringTokenizer st = new StringTokenizer(s," ", false);
        do{
            temp=st.nextToken();
            switch (i) {
              case 1: {idzona=Integer.parseInt(temp);break;}
              case 2:{colore=temp;break;}
              case 3:{tariffa=Double.parseDouble(temp);break;}
              case 4:{minimo=Double.parseDouble(temp);break;}
              case 5:{giornoi=Integer.parseInt(temp);break;}
              case 6:{giornof=Integer.parseInt(temp);break;}
              case 7:{orai=temp;break;}
              case 8:{oraf=temp;break;}
              case 9:{orai2=temp;break;}
              case 10:{oraf2=temp;break;}
              default: break;
            }
            i = i + 1;
          } while (st.hasMoreTokens());

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    A me non salta nessun token...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Non riesco a spiegarmi perchè dovrebbe dare un errore simile e non riuscire a leggere tutti i token.
    In ogni caso il ciclo che usi è sbagliato perchè viene eseguito sempre almeno una volta mentre può accadere che tu non abbia token.
    Il controllo per la presenza di un ulteriore token deve essere fatto prima di andare a leggere quel token.

    Usa questo codice:
    codice:
    while(st.hasMoreTokens()){
    temp=st.nextToken();
      switch (i) {
        case 1: {idzona=Integer.parseInt(temp);break;}
        case 2:{colore=temp;break;}
        case 3:{tariffa=Double.parseDouble(temp);break;}
        case 4:{minimo=Double.parseDouble(temp);break;}
        case 5:{giornoi=Integer.parseInt(temp);break;}
        case 6:{giornof=Integer.parseInt(temp);break;}
        case 7:{orai=temp;break;}
        case 8:{oraf=temp;break;}
        case 9:{orai2=temp;break;}
        case 10:{oraf2=temp;break;}
        default: break;
      }
      i++;
    }
    Ho sostituito i = i+1 con i++ visto che esiste questa scorciatoia.

    Fammi sapere se hai riscontrato ancora il problema del salto dei token.

    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.