Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107

    [Java] Dubbio su StringTokenizer

    Ciao a tutti; il mio problema è abbastanza semplice.
    Supponiamo io abbia:

    String prova = "PSW-567-32P-321";
    StringTokenizer st = new StringTokenizer(prova, "PSW");

    Come devo scrivere il delimitatore in StringTpkrnizer affinché prova sia spezzettata secondo PSW? Infatti se lascio così poiché il 3° carattere contiene la P sarà a sua volta spezzettato; ora vorrei che il delimitatore fosse effettivamente la stringa PSW e non i caratteri P o S o W.
    Grazie a tutti
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    726
    non ho capito bene, ma tu voi ottenere PWS da una parte e poi 567-32P-321.
    se vuoi dividerla in quattro segmenti basta che metti -

  3. #3
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao; il mio problema è il seguente; ho questo metodo:

    codice:
        private List getPageKeys(String key) {
            List resultSet = new Vector();
            resultSet.add(key);
            StringTokenizer st = new StringTokenizer(key, "FWD-");
            String token = null;
    
            while (st.hasMoreTokens()) {
                token = st.nextToken();
                System.out.println( token );
                resultSet.add( token );
            }
    
            return resultSet;
        }
    Come vedi vorrei che la mia stringa key fosse suddivisa in token e il delimitatore fosse FWD-.
    Ora supponiamo io faccia:

    codice:
    List aList = getPageKeys( "FWD-001-005-001" );
    tutto è ok; mi stampa:

    codice:
    001
    005
    001
    E questo mi va bene. Ma se faccio:
    codice:
    List aList = getPageKeys( "FWD-0F1-005-001" );
    Non va + bene; infatti stampa:
    codice:
    0
    1
    005
    001
    Questo mi fa capire che in realtà lo StringTokenizer va alla ricerca non della stringa FWD-, bensì dei caratteri F, W, D, -; quindi non appena trova uno di questi caratteri esso mi crea un token; io non vorrei ciò; vorrei che il token fosse creato dal delimitatore FWD-; cioè anche nel secondo caso voreei che si stampasse:

    codice:
    001
    0F5
    001
    Ecco una cosa del genere sono sicuro sia fattibile, ma non ricordo come la risolsi a suo tempo.
    Grazie
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    726
    non so proprio, però potresti usare una sottostringa che parte dal terzo carattere e dividere per il trattino, oppure dividere sempre per il trattino e saltare il prino token se è sempre pwd

  5. #5

    Re: [Java] Dubbio su StringTokenizer

    Originariamente inviato da Angelo1974
    Ciao a tutti; il mio problema è abbastanza semplice.
    Supponiamo io abbia:

    String prova = "PSW-567-32P-321";
    StringTokenizer st = new StringTokenizer(prova, "PSW");

    Come devo scrivere il delimitatore in StringTpkrnizer affinché prova sia spezzettata secondo PSW? Infatti se lascio così poiché il 3° carattere contiene la P sarà a sua volta spezzettato; ora vorrei che il delimitatore fosse effettivamente la stringa PSW e non i caratteri P o S o W.
    Grazie a tutti
    il secondo parametro del costruttore dello srtingTokenizer è una stringa che contiene i caratteri che, singolarmente, vengono utilizzati come separatori.
    Ad esempio quindi new StringTokenizer("0123456789", "37")
    resituirà i seguenti token:
    012
    456
    89

    Per fare quello che vorresti fare tu devi andare in cerca della sottostringa che vuoi nella stringa (e gestirti quindi la tokenizzazione tu). Per far ciò puoi usare il metodo indexOf, che riceve tra i parametri una sottostringa, e ti restituisce l'indice della prima occorrenza di questa sottostringa nella stringa, o -1 se la sottostringa non si trova.

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,426
    sennò potresti usare split con le espressioni regolari, che magari possono essere inserite anche in Tokenizer ma non sono sicuro.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,078
    Ti pongo una domanda... non è che, semplicemente, stai sbagliando delimitatore? Se tutte le tue stringhe sono della forma
    codice:
    XXX-XXX-XXX-XXX...
    dove X corrisponde ad un qualsiasi carattere, ma a te serve solamente spezzettarle secondo il simbolo "-", dovresti costruire uno StringTokenizer in questo modo:
    codice:
    StringTokenizer st = new StringTokenizer( tuaStringa, "-" );
    Dai tuoi precedenti esempi mi sembra di capire che hai bisogno di suddividere la stringa in base al simbolo "-". Che tu, poi, non utilizzi il primo token non dev'essere certo un problema per te. Nemmeno se il token iniziale compare anche all'interno: un semplice if con il metodo equals() risolve il problema.

    Poi, se la cosa è più complessa e a te interessa veramente avere come separatore una stringa, anzichè un carattere, credo che, oltre alle soluzioni che già ti sono state offerte, tu possa semplicemente crearti un tuo StringTokenizer, che non utilizza un solo carattere come separatore, ma una stringa.


    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

  8. #8
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao Lele; non a me serve spezzettare proprio con FWD-... il fatto che questo delimitatore appaia solo nel primo token è stata una coincidenza; il problema è che le stringhe che devo controllare potrebbero anche contonere anche FWD in ordine sparso.
    Ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,078
    Immaginavo che la cosa non fosse così semplice
    Mi sono trovato anch'io nella tua stessa identica situazione e mi sono costruito un Tokenizer personalizzato!


    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

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