Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 33

Discussione: funzione tokenizer

  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    guarda ho appena testato questo codice

    codice:
    package testapplication;
    
    /**
     *
     * @author Valentina
     */
    public class Main {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            String testo = "hello\n\rworld\n\r!!";
            String[] tmp = testo.split("\\n\\r");
            System.out.println("tmp " + tmp.length);
            for (String str : tmp) System.out.println("str " + str);
            StringTokenizer token = new StringTokenizer(testo, "\\n\\r");
            for (; token.hasMoreTokens();){
                String str = token.nextToken();
                System.out.println("str " + str);
            }
        }
    }
    e il risultato dell'esecuzione è

    codice:
    tmp 3
    str hello
    str world
    str !!
    tmp 2
    str hello
    wo
    str ld
    !!
    come vedi il tokenizer ha un comportamento differente rispetto a split, penso derivi da come tokenizer considera il delimitatore e per sapere in dettaglio cosa succede dovrei andare un attimo a guardare il codice (e più tardi lo faccio).
    Per il momento usa split che funziona bene (oltretutto anche oracle ti consiglia di usare o split o la regex)
    quindi cosa non funziona??

  2. #12
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189
    valia fammi capire una cosa, tu usando queste linee di codice

    codice:
     String testo = "hello\n\rworld\n\r!!";
            String[] tmp = testo.split("\\n\\r");
            System.out.println("tmp " + tmp.length);

    dichiari un testo come stringa, e assegni al vettore tmp il testo senza i delimitatori, vorrei capire una cosa, xche' tu nel codice che hai implementato usi entrambi le funzioni, split e tokenizer??
    io ho capito perfettamente come funziona la split, ma un po' meno l'altra...

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    è un esempio di come funzionano, niente di che...ora ho notato che tokenizer ha un comportamento strano, ma non ho il tempo di indagare ora tutto qui

    Il fatto che il valore di ritorno di split lo raccolga in String[] tmp è normale visto che la stringa iniziale non è modificata. se non prendo il valore non avrò mai visibili i risultati di split

  4. #14
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189
    valia cosa intendi con comportamento strano??

  5. #15
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    codice:
    str hello
    wo
    str ld
    !!
    questo, i token dovrebbero essere 3 non 2 e soprattutto non li spezza per il delimitatore che ho dato io

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Ok. Il punto è come vai a specificare il delimitatore per il tokenizer.

    Nel caso di StringTokenizer devi

    codice:
    StringTokenizer token = new StringTokenizer(testo, "\n\r");
    anzichè


    codice:
    StringTokenizer token = new StringTokenizer(testo, "\\n\\r");
    e così ottieni l'output desiderato.

    Spiegazione rapida: il tokenizer al suo interno cerca la stringa che specifico carattere per carattere e considera \n un carattere unico, ma \\n 2 caratteri, il primo è appunto \ e il secondo n, ergo fa lo split in modo anomalo.
    Split invece usa il meccanismo delle regex (cioè risparmia a noi il dover fare tutto il giro per pattern che chi ha già usato regex sa a cosa mi riferisco).
    Riguardo la spiegazione, è un comportamento dedotto dall'analisi del codice di tokenizer e split, posso sbagliarmi, ma suppongo sia questa la ragione per cui non mettendo il carattere di escape funziona perfettamente nel caso di tokenizer, qualche problemino nel caso di split

  7. #17
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189
    valia neanche la funzione split li spezza....ne spezza uno alla volta, ma nel mio caso ho 2 delimitatori

  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    che vuoi dire con ho 2 delimitatori??
    Perchè ti ho fatto un esempio di split funzionante.

    Ora se io ho la stringa

    codice:
    String test = "sto[provando\n\rafare[unsemplcicissimo\n\rtest"
    e devi splittare per il carattere [ oppure per \n\r puoi fare 2 cose

    1. scrivi una regex fatta per benino (cosa che ti sconsigliamo ora perché non è facile, anche se sarebbe la soluzione migliore)
    2. fare uno split ricorsivo, prima parsare per [ e poi per \n\r o viceversa

    ergo, come è fatta la tua stringa (un esempio) e come vuoi splittare?

  9. #19
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189
    allora la stringa e' fatta nel seguente modo

    pasta===\r\n2pane===\r\n4eccecc.....

    ecco io devo levare i caratteri ( = \r \n )

  10. #20
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa se la stringa è sicuro fatta in quel modo

    codice:
    String testo = "pasta===\r\n2pane===\r\nanother";
            String[] tmp = testo.split("===\\r\\n");
    a me funziona

    codice:
    tmp 3
    str pasta
    str 2pane
    str another

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 © 2026 vBulletin Solutions, Inc. All rights reserved.