Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Strano problema con String Tokenizer

    Ciao a tutti!
    HO bisogno di spezzettare una stringa del tipo
    codice:
    vacanza(portogallo,80,hotel,7)
    in maniera tale che riesca a prendere solo gli elementi tra le parentesi; ho pensato di utilizzare uno StringTokenizer e a tal proposito utilizzo questo codice:
    codice:
    StringTokenizer st = new StringTokenizer(contenuto, "( , )");
    		
    		while (st.hasMoreTokens()) {
    			System.out.println((st.nextToken()));			
    		}
    Se provo a lanciare questo codice non ho alcun errore... il problema sorge quando decido di voler memorizzare i valori della stringa spezzettata in una ArrayList (quindi questo ArrayList nel mio caso conterrebbe: vacanza,portogallo,80,hotel,7) e dunque il codice diventa:

    codice:
    StringTokenizer st = new StringTokenizer(contenuto, "( , )");
    ArrayList<String> campi = new ArrayList<String>();	
    
    		while (st.hasMoreTokens()) {
    			System.out.println((st.nextToken()));
    			campi.add(st.nextToken());			
    
    		}
    a questo punto mi viene generato il seguente errore:
    codice:
    java.util.NoSuchElementException
    	at java.util.StringTokenizer.nextToken(Unknown Source)
    io non capisco dov'è il problema...
    mi aiutate per favore?? grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    perché non hai scritto bene la regex per cui intendi spezzettare!!
    Allora, prima domanda, la tua stringa è solo

    vacanza(portogallo, 80, hotel, 7)

    oppure è nella forma

    vacanza(portogallo, 80, hotel, 7) , (spagna,10, pippo, 2)?

    nel primo caso una soluzione alternativa (riducendo i token) sarebbe

    codice:
    String tmp = "vacanza(portogallo, 80, hotel, 7)";
    String toWork = tmp.substring(tmp.indexOf("("), tmp.length() - 1));
    e in toWork hai

    portogallo, 80, hotel, 7

    questa la splitti per "," e hai i vari elementi.

    Nel secondo caso (più di una parentesi) bisogna scrivere bene la regex, anche se prima devi spezzare per le parentesi, e poi per la virgola, io fare così per rendermi meglio conto di dove è un eventuale errore

  3. #3

    siiiii

    Ciao e grazie per avermi risposto!
    mi trovo nel primo caso e ho provato a modificare il codice come mi hai consigliato... ovviamente funziona! grazie mille...! tuttavia non riesco a capire il perchè quello che ho scritto io non andava bene... cioè:se stampo è tutto ok, se provo a memorizzare.. no!
    grazie ancora!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io non ho guardato tutto il tuo codice, ho visto solo la regex e l'ho fatto in altro modo (più semplice e meno fonte di errore)

    codice:
    while (st.hasMoreTokens()) {
    			System.out.println((st.nextToken()));
    			campi.add(st.nextToken());			
    
    		}
    qui fai una volta nextToken per stamparlo, e una volta per memorizzarlo, ma sei andata avanti di 2, non di uno.


    codice:
    while (st.hasMoreTokens()) {
    String tmp = st.netxToken(); 
    
    			System.out.println(tmp);
    			campi.add(tmp);			
    
    		}
    vedi se così funziona, ma non sono sicurissima della regex che avevi scritto

  5. #5

    !

    Hai ragioneeeeeeeeeee!!!!!!! ma quanto sono distratta?!?!?!?!??!
    comunque ho utilizzato il primo codice che mi hai consigliato... è più semplice, più pulito del mio..!
    grazie!

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    capita, ho provato il tuo codice, la tua regex è corretta e a me stampa

    codice:
    vacanza
    portogallo
    80
    hotel
    7
    se è quello che ti interessa escludi il primo result.

    Attenta al next e a quanto vai avanti (ovviamente) e quello di cercare codici lineari è una mia abitudine, per ridurre al massimo le fonti di errore e per decifrare in maniera rapida il codice che ho scritto dopo mesi

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.