Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    22

    [JAVA] Trasformare una stringa in un oggetto

    Ciao a tutti.
    Vorrei sapere se è possibile fare una cosa del genere.
    Leggendo una riga da un file di testo
    codice:
    Titolo:Concetti di informatica\Autore:Horstmann\Casa editrice:Apogeo\ Codice ISBN:9346364\
    trasformare questa stringa in un oggetto di tipo Libro con un metodo toObject()

    L'oggetto libro a queste caratteristiche:
    codice:
    public class Libro {
    
        
        private String titolo;
        private String autore;
        private String casaeditrice;
        private String codiceisbn;
        
        public Libro(String t, String a,String ce,String cisbn) throws IOException {
            this.titolo = t;
            this.autore = a;
            this.casaeditrice = ce;
            this.codiceisbn = cisbn;
        }
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    con un metodo toObject() no perche' String non e' estendibile...

    spacca la stringa in piu' sottostringhe contenenti i dati che ti servono a richiamare il costruttore completo di Libro.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    22
    OK...mi potreste aiutare facendo un piccolo esempio di come trovere la substring titolo all'interno della stringa.
    Grazie!

    P.s. Forse è meglio modificare la stringa dimodoche sia più facile ottenere le sottostringhe??

  4. #4
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    codice:
    String tuaStringa = "Titolo:Concetti di informatica\Autore:Horstmann\Casa editrice:Apogeo\ Codice ISBN:9346364\"
    
    String campo1 = "Titolo:";
    String separator = "/";
    String titolo = tuaStringa.substring(tuaStringa.indexOf(campo1) + campo1.length(), tuaStringa.indexOf(separator));

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    22
    Perchè facendo la stessa cosa con "Autore" mi ritorna l'errore Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -8
    codice:
    import java.io.*;
    
    
    
    class Substring {
      public static void main(String[] args) throws IOException {
           FileReader leggi=new FileReader("catalogolibri.txt");
           BufferedReader leggicatalogo = new BufferedReader(leggi);
           String riga = leggicatalogo.readLine() ;
           String campo1 = "Titolo:";
           String separator = "/";
           String campo2 = "Autore:";
           String titolo=riga.substring(riga.indexOf(campo1) + campo1.length(), riga.indexOf(separator));
           String autore=riga.substring(riga.indexOf(campo2) + campo2.length(), riga.indexOf(separator));
         leggicatalogo.close();
    
    
       System.out.println(titolo);
       System.out.println(autore);
        }
    }

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Beh...
    L'esempio postato conteneva un errore: tu usi il backslash per separare e assegni a "separato" uno slash...

    Ti suggerisco, comunque, di provare il metodo split() della classe String: è più comodo!
    codice:
    String[] sottostringhe = miaStringa.split("\\\\");
    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    22
    No..lo slash lo corretto nel file di testo ma non funziona comunque quando cerco la sottostring autore.
    Come mai??

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Non puoi cercare i successivi campi semplicemente ripetendo l'istruzione e variando solo il primo parametro del metodo substring().

    In questo modo, infatti, gli indici vanno fuori limite:
    codice:
    String riga = "Titolo:Concetti di informatica\Autore:Horstmann\Casa editrice:Apogeo\ Codice ISBN:9346364\"
    String campo1 = "Titolo:";
    String campo1 = "Autore:";
    
    String titolo=riga.substring(riga.indexOf(campo1) + campo1.length(), riga.indexOf(separator));
    // L'esecuzione di questa istruzione avviene così:
    titolo = riga.substring(7, 30)   // Ed estrae correttamente "Concetti di informatica"
    
    String autore=riga.substring(riga.indexOf(campo2) + campo2.length(), riga.indexOf(separator));
    // L'esecuzione di questa istruzione avviene così:
    autore = riga.substring(38, 30)   // E qui non va più bene!!
    Questo accade perchè il metodo indexOf() calcolato con parametro "separator" restituirà sempre la prima posizione che trova per quel valore (che nel caso dell'esempio è sempre 30).

    Devi essere tu a guidare il metodo indexOf() in modo che parta a cercare dal punto che ti interessa.
    Dovrai, quindi, modificare in questo modo le chiamate:
    codice:
    String cosaCercare=riga.substring(riga.indexOf(campo) + campo.length(), riga.indexOf(separator, indexOf(campo)));
    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

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    22
    Grazie mille!!!Così riesco ad ottenere tutte le stringhe e metterle nell'oggetto Libro.
    Però, se da un File dovessi leggere tutte le righe e creare un array di oggetti Libro e inserire in ogni oggetto i parametri trovati come posso fare??Io riesco a creare l'array ma non riesco a creare il ciclo per inserire le stringhe.
    codice:
    import java.io.*;
    
    class Substring {
      public static void main(String[] args) throws IOException {
           FileReader leggi=new FileReader("catalogolibri.txt");
           BufferedReader leggicatalogo = new BufferedReader(leggi);
           String riga = leggicatalogo.readLine() ;
           int numRighe = 0;
       
            while ((riga = leggicatalogo.readLine()) != null)
             numRighe++;
            leggicatalogo.close();
            Libro[] arrLinee = new Libro[numRighe];

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Io ti consiglio di usare questo approccio:
    codice:
    Vector v = new Vector();   // Devo usare un Vector perchè non so a priori quante sono le righe
    while((riga = leggicatalogo.readLine()) != null) {
       v.add( riga );   // Aggiungo al vettore la riga appena letta dal file
    }
    leggicatalogo.close();
    
    Ora costruisco l'array (so quanti elementi ha, me lo dice il Vector):
    Libro[] arrLine = new Libro[ v.size() ];
    
    // Ora scorro tutto il vettore ed elaboro ciascuna linea:
    String lineaLetta = "";
    for(int j=0; j<arrLine.length; j++) {
       lineaLetta = (String) v.elementAt(j);
       arrLine[j] = new Libro();
       // ... ora elabora la tua linea (ce l'hai nella variabile lineaLetta)
       // ... e inserisci tutti i campi nell'oggetto arrLine[j]
    }
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.