Visualizzazione dei risultati da 1 a 7 su 7

Discussione: aiuto su sottostringhe

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81

    aiuto su sottostringhe

    Salve a tutti.
    Ho questa situazione: ho una stringa lunghissima creata dalla lettura di un file txt. Devo dividere tale stringa in base a questi simbol: {} cioè far leggere e salvare tutto il contenuto presente tra le parentesi. Ho letto su internet che posso dividere tale stringa con il metodo split. ora però la mia domanda è: quando ho diviso la stringa...dove mi conviene salvare tutte le possibile sottostringhe? considerate che le sottostringhe posso essere di lunghezza variabile quindi anche molto lunghe.
    Grazie a tutti dell'aiuto

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da simo9115 Visualizza il messaggio
    Devo dividere tale stringa in base a questi simbol: {} cioè far leggere e salvare tutto il contenuto presente tra le parentesi.
    Se hai un contenuto tipo "blabla {prova} blabla {ciao}" e vuoi estrarre "prova" e "ciao" perché sono tra { }, allora sappi che split NON ti è granché utile.

    Ci sono almeno 2 soluzioni:
    a) andare avanti con gli indexOf, cioè parti dall'inizio e cerchi "{", quando lo trovi, parti dal carattere successivo a cercare "}", quindi fai un substring per prendere il contenuto. E si continua così ...

    b) Usare le "espressioni regolari", ovvero le classi Pattern/Matcher in java.util.regex
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81
    con il metodo tokenizer che dici? perchè utilizzando questo metodo ho letto che posso suddividere il testo del file...l'unica cosa è che facendo così:
    codice:
    public class confronto {
    
    
    	public ArrayList<String> Inizializza()//metodo che stampa il documento 
        {
           try {
               ArrayList<String> arr = new ArrayList<String>();
               BufferedReader input = new BufferedReader(new FileReader("InputString.txt"));
               String str;
               while( (str = input.readLine()) != null) {
            	   StringTokenizer st = new StringTokenizer(str, "{");
            	   while (st.hasMoreTokens()){
                   String token = st.nextToken();
            	   arr.add(token);
            	   }
               }
               input.close();
               return arr;
           } catch (IOException e) {
               System.out.println("Errore lettura file");
               e.printStackTrace();
               return null;
           }
        }
    
    
    }
    e per stampare:

    codice:
    public class main {
    
    
    	public static void main(String[] args) {
    		
    		confronto conf = new confronto();
    		
    		ArrayList<String> arr = conf.Inizializza(); //stampa documento
    		for(int i=0; i<arr.size(); i++)
                System.out.println("Token"+i+": " +arr.get(i));
    	}
    
    
    }
    ottengo che ogni token non riesce a prendere tutto il pezzo del documento, cioè mi tronca prima e mi crea successivamente un altro token...penso che sia perchè i pezzi che devo prendere dal testo siano molto lunghi...
    Ultima modifica di simo9115; 26-03-2016 a 12:02

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da simo9115 Visualizza il messaggio
    con il metodo tokenizer che dici?
    A questo punto vorrei essere molto chiaro, e lo ripeto, se dato un testo "blabla {prova} blabla {ciao}" tu vuoi estrarre solo (e ripeto SOLO) le parti "prova" e "ciao", allora le soluzioni sono in effetti almeno 3:

    a) Usare in ciclo indexOf per trovare gli indici di "{" e "}" e andare poi a prendere il contenuto tra le { } tramite substring.

    b) Usare le espressioni regolari, creando un Pattern che descrive genericamente una sequenza {qualcosa} e andando poi ad usare il find() di Matcher per trovare ed estrarre il contenuto tra le parentesi.

    c) Usare StringTokenizer. Va anche bene, in effetti non ci avevo pensato prima, ma in questo caso devi farti restituire non solo i token ma anche i delimitatori (che sono '{' e '}'). Altrimenti non sapresti più distinguere quali sono le parti tra le { } e quali no.


    Inoltre: se hai più righe (essendoci un file di testo in input) e la coppia { } non "spanna" su più righe, allora va bene leggere una riga per volta e ragionare solo su quella corrente e basta.

    Se invece tu avessi un file di testo:

    codice:
    Prova {ciao
    esempio} File
    di testo
    ovvero la parte tra { } inizia su una riga e finisce su un'altra, allora leggere a righe sarebbe ancora tecnicamente fattibile ma servirebbe più "logica" di analisi per estrarre la parte tra le graffe.
    Sarebbe meglio in tal caso avere tutto il testo in una unica stringa
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81
    Quote Originariamente inviata da andbin Visualizza il messaggio
    ovvero la parte tra { } inizia su una riga e finisce su un'altra, allora leggere a righe sarebbe ancora tecnicamente fattibile ma servirebbe più "logica" di analisi per estrarre la parte tra le graffe.
    Sarebbe meglio in tal caso avere tutto il testo in una unica stringa
    purtroppo nel mio caso la parte tra {} inizia su una riga e finisce su un'altra(anche parecchie dopo). Questo perchè il file txt è il risultato di un processo scaturito da un altro programma...infatti come ho già detto prima mi accade che, utilizzando tokenizer, ottengo che ogni token è costituito da un pezzo di testo, cioè mi tronca prima e mi crea successivamente un altro token. il mio problema sta nel mettere insieme questi token per creare un unica stringa....

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da simo9115 Visualizza il messaggio
    purtroppo nel mio caso la parte tra {} inizia su una riga e finisce su un'altra(anche parecchie dopo). Questo perchè il file txt è il risultato di un processo scaturito da un altro programma...infatti come ho già detto prima mi accade che, utilizzando tokenizer, ottengo che ogni token è costituito da un pezzo di testo, cioè mi tronca prima e mi crea successivamente un altro token. il mio problema sta nel mettere insieme questi token per creare un unica stringa....
    Soluzione 1) Leggi tutto il testo per averlo alla fine in una unica grossa stringa (compresi newline etc). A quel punto puoi applicare facilmente una delle tecniche a/b/c dette prima a tua scelta.

    Soluzione 2) Leggi a "righe" ma serve più ragionamento e logica per trovare { e } il cui contenuto "spanna" su più righe. Nulla di impossibile ma bisogna ragionare. E la tecnica b) (singola espressione regolare) NON è praticabile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81
    provo e ti faccio sapere
    Ultima modifica di simo9115; 29-03-2016 a 17:47

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.