Lettura file input

di il
3 risposte

Lettura file input

Ho un problema con la lettura del file di input, spiego nel dettaglio... ho il seguente file di input:

Data:11-07-2015 DA: Marco A: Franco Testo:Ciao come va?
Data:11-07-2015 DA: Franco A: Marco Testo:Ciao!
Data:12-07-2015 DA: Anna A: Marco Testo:Ciao!

Creo la mia classe Messaggio :

	public class Messaggio {
		
		String data;
		String mittente;
		String destinatario;
		String testo;
		
		public Messaggio(String data, String mittente, String destinatario, String testo){
			this.data=data;
			this.mittente=mittente;
			this.destinatario=destinatario;
			this.testo=testo;
		}
		
		public String toString(){
			StringBuffer sb = new StringBuffer();
			sb.append(data+mittente+destinatario+testo);
			sb.append("\n");
			return sb.toString();
		}
}
e la mia classe Main:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) throws Exception{
	    
		ArrayList<Messaggio> listaMessaggi= new ArrayList<Messaggio>();
		String data="";
		String mittente="";
		String destinatario="";
		String testo=""; 
		
		 BufferedReader br;

			br = new BufferedReader(new FileReader("input.txt"));
			String line;
			Messaggio m=new Messaggio(data,mittente,destinatario,testo);
			while((line = br.readLine())!=null) {
				if(line.isEmpty()) m=new Messaggio(data,mittente,destinatario,testo);;
				if(line.contains("Data:")) {
					String []e=line.split("");
					data=e[0].replaceAll("Data:", "");
					m.data=data;
					mittente=e[1].replaceAll("DA:", "");
					m.mittente=mittente;
					destinatario=e[2].replaceAll("A:", "");
					m.destinatario=destinatario;
				}
				if(line.contains("Testo:")) {
					testo=line.replace("Testo:", "");
					m.testo=testo;
					listaMessaggi.add(m);
					m=new Messaggio(data,mittente,destinatario,testo);
				}
			}
			System.out.println(listaMessaggi);
			br.close();		
	}
}
Il problema è che mi legge in questo modo:
[DatData:11-07-2015 DA: Marco A: Franco Ciao come va?
, DatData:11-07-2015 DA: Franco A: Marco Ciao!
, DatData:12-07-2015 DA: Anna A: Marco Ciao!
]

Perchè esce Dat all'inizio?? Eppure mi sembra di aver splittato e replace tutto in modo corretto

3 Risposte

  • Re: Lettura file input

    Anto11796 ha scritto:


    Creo la mia classe Messaggio :
    Ok, la "base" c'è ma .. sarebbe da migliorare.
    a) abituati a tenere i campi private (e a mettere i metodi getter e/o setter public)
    b) detto in generale, \n NON è il newline.

    Anto11796 ha scritto:


    e la mia classe Main:
    L'approccio del parsing non è per niente sensato.
    Tanto per dirne una: sai cosa fa uno split("") ovvero passando come regex una stringa vuota?? Spezza ad OGNI singolo carattere!!
    Quindi ottieni "D", "a", "t", "a", ":" .......

    A che diavolo di scopo??
  • Re: Lettura file input

    Sì effettivamente non ha molto senso, ma non sapevo su cosa splittare.. ora però ho modificato il Main cambiandolo in :
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.ArrayList;
    
    public class Main {
    
    	public static void main(String[] args) throws Exception{
    	    
    		ArrayList<Messaggio> listaMessaggi= new ArrayList<Messaggio>();
    		String data="";
    		String mittente="";
    		String destinatario="";
    		String testo=""; 
    		
    		 BufferedReader br;
    
    			br = new BufferedReader(new FileReader("input.txt"));
    			String line;
    			Messaggio m=new Messaggio(data,mittente,destinatario,testo);
    			while((line = br.readLine())!=null) {
    				if(line.isEmpty())// m=new Messaggio(data,mittente,destinatario,testo);;
    					continue;
    				if(line.contains("Data:")) {
    					String []e=line.split("\t");
    					data=e[0].replaceAll("Data:", "");
    					m.data=data;
    					mittente=e[1].replaceAll("DA:", "");
    					m.mittente=mittente;
    					destinatario=e[2].replaceAll("A:", "");
    					m.destinatario=destinatario;
    					testo=e[3].replace("Testo:", "");
    					m.testo=testo;
    					listaMessaggi.add(m);
    					m=new Messaggio(data,mittente,destinatario,testo);
    				}
    			}
    			System.out.println(listaMessaggi);
    			br.close();		
    	}
    }
    
    Riguardo ai private ecc al momento non ci vengono richiesti poichè abbiamo poco tempo (2 ore) per scrivere un intero codice composto da lettura file input +5 richieste random... ed essendo il tempo poco mettiamo tutti pubblico
  • Re: Lettura file input

    Anto11796 ha scritto:


    String []e=line.split("\t");
    Se ci sono dei tabulatori che separano i vari dati (non mi era chiaro che ci fossero, solo guardando l'esempio che hai scritto ..), allora è MOLTO più semplice.

    Presta attenzione a come imposti l'oggetto Messaggio. Sfrutta il costruttore, NON assegnare direttamente ai campi.
Devi accedere o registrarti per scrivere nel forum
3 risposte