Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    (java) Parsing di stringhe

    Ho una stringa di testo che rappresenta il codice scritto in una classica classe java.
    Da questa stringa devo togliere i commenti e il testo contenuto tra ""

    Esempio

    /**
    *bla bla
    */

    public class {

    //cicco
    System.out.println("augaugaug");


    Deve diventarmi:

    public class {
    System.out.println("");

    Avete mica qualche idea su come possa fare?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    E' sicuramente un lavoraccio. Io mi sono trovato nella tua stessa situazione proprio pochi giorni fa quando dovevo effettuare il parsing di una stringa al cui interno c'era la rappresentazione testuale delle immagini (un po' come per questo forum, quando si incontrano i due punti( : ) un codice di immagine e di nuovo i due punti).

    Il mio suggerimento è quello di usare uno StringTokenizer, nella seguente forma:
    codice:
    StringTokenizer st = new StringTokenizer(stringa, separatori, true);
    stringa: la stringa che devi esaminare;

    separatori: una stringa contenente tutti i separatori dei vari token (nel tuo caso potrebbero andare bene le virgolette, lo slash(/) e l'asterisco);

    (PS: StringTokenizer fa parte di java.util.*)

    In questo modo lo StringTokenizer ti restituisce tutti i tokens, compresi, quindi, i separatori (terzo parametro = true), in modo che tu li possa esaminare e, a seconda del token, prendere le tue decisioni. Non sarà un lavoro facile, te lo garantisco. (Per rosolvere il mio problema ho dovuto scrivere circa 60 righe di codice, ed il mio era molto più semplice).

    Ti auguro un buon lavoro!

    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Il problema è che se metto come separatori così

    new StrinTokenizer (text, "//", true)

    se nel testo c'è

    bla bla bla /ecc

    Quella barra la prende come separatore io invece come separatore vorrei la doppia barra // (che indica l'inizio di una riga commnetata)

    Come faccio?

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Devi implementare ulteriori controlli a mano...

    Un' alternativa consiste nell'utilizzare un vero Parser: JLex è un generatore automatco di parser java, che produce un parser in base a una specifica testuale, ma se non lo conosci e non hai bisogno di implementare anche parsing piu complessi forse non ti conviene.

    Prova anche a dare un'occhiata alla documentazione del metodi split() di String, in particolare segui il link "regular expression"; probbilmente c'è un modo per effettuare dei parsing piu sofisticati,


  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Infatti... per lo StringTokenizer ogni carattere della stringa separatori è un separatore. Dovresti usare questa dichiarazione
    codice:
    new StringTokenizer(text, "\"/*", true);
    E devi implementare tutti i controlli a mano. Per esempio, per il doppio slash devi controllare manualmente che, una volta letto un separatore slash, ce ne sia un'altro subito dopo.


    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    io volevo proprio evitare di fare i controlli a mano
    Penso che ci sia un'altra soluzione datochè lo StringTokenizer è deprecato nelle 1.4.0 vorrei evirae di usarlo

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non so dove tu abbia letto che lo StringTokenizer è deprecato dalla 1.4.0, ma è errato: questo link è della documentazione della JDK1.4.2:

    http://java.sun.com/j2se/1.4.2/docs/...Tokenizer.html

    e questo è dell'ultimissima 1.5.0:

    http://java.sun.com/j2se/1.5.0/docs/...Tokenizer.html

    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
    Registrato dal
    Oct 2002
    Messaggi
    883
    nella documentazione 1.4.2 alla classe StringTokenizer si legge:

    StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

  9. #9
    ma fallo a mano con le regular expressions che c metti di meno, fai codice più performante e soprattutto scrivi 1/4 delle righe di codice che dovresti scrivere con il tokenizer

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    infatti opterei per quelle ma non le ho mai usate le regular espression
    qualche suggerimento?

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.