Controllo su file tramite Scanner

di il
2 risposte

Controllo su file tramite Scanner

Salve a tutti. Ho bisogno di una aiuto riguardo una lettura file. in poche parole dovrei verificare, senza scorrere lo Scanner, la riga successiva se contiene un determinato String pattern.

Io ho fatto cosi:

this.residence= new TreeMap<String, Abitazione>();
		Abitazione a=null;
		while(a!=null) {
			try {
				if(scR.hasNext("indipendente")) {
					a=Soluzione.read(scR);
					this.residence.put(a.getId(), a);
				}else if(scR.hasNext("appartamento")){
					a=Appartamento.read(scR);
					this.residence.put(a.getId(), a);
				}else {
					throw new FileUncorrectExpection("il file soluzioni.dati non e' scritto correttamente");
				}
			} catch (FileUncorrectExpection e) {
				System.err.println("E' stata trovata un eccezione di tipo FileUncorrectExpection");
				System.err.println("il file contiene dati errati per l'inserimento delle abitazioni");
				System.err.println(" la Struttura dati non verra riempita correttamente");
			}
		}
		

ho usato un hasnext solo che poi al momento del read che quindi scorre lo scanner e legge l'oggetto torna null e non viene riempita la collezione.

nel caso vi metto anche il metodo read magari sta qui l'errore solo che io non lo vedo.

public static Soluzione read(Scanner sc) {
		if(sc.hasNextLine()) return null;
		String tipo=sc.nextLine();
		
		if(sc.hasNextLine()) return null;
		String id=sc.nextLine();
		
		if(sc.hasNextLine()) return null;
		String via=sc.nextLine();
		
		if(sc.hasNextLine()) return null;
		String numeroCiv=null;
		int newNumCiv=0;
		try {
			numeroCiv=sc.nextLine();
			newNumCiv=Integer.parseInt(numeroCiv);
		} catch (NumberFormatException e) {
			System.err.println("E' stata trovata un eccezione di tipo NumberFormatException");
			System.err.println("la stringa " +numeroCiv + " non puo essere convertita in un int");
			System.err.println("l'oggetto non verra' creato");
			return null;
		}
		
		if(sc.hasNextLine()) return null;
		String comune=sc.nextLine();
		
		if(sc.hasNextLine()) return null;
		String valore=null;
		double newValore=0;
		try {
			valore=sc.nextLine();
			newValore=Double.parseDouble(valore);
		} catch (NumberFormatException e) {
			System.err.println("E' stata trovata un eccezione di tipo NumberFormatException");
			System.err.println("la stringa " +valore + " non puo essere convertita in un int");
			System.err.println("l'oggetto non verra' creato");
			return null;
		}catch (NullPointerException e) {
			System.err.println("E' stata trovata un eccezione di tipo NullPointerException");
			System.err.println("la stringa e' vuota");
			System.err.println("l'oggetto non verra' creato");
			return null;
		}
		
		if(sc.hasNextLine()) return null;
		String piano=null;
		int newPiano=0;
		try {
			piano=sc.nextLine();
			newPiano=Integer.parseInt(piano);
		} catch (NumberFormatException e) {
			System.err.println("E' stata trovata un eccezione di tipo NumberFormatException");
			System.err.println("la stringa " + piano + " non puo essere convertita in un int");
			System.err.println("l'oggetto non verra' creato");
			return null;
		}
		
		if(sc.hasNextLine()) return null;
		String giardino=sc.nextLine();
		boolean newGiardino=Boolean.parseBoolean(giardino);;
		
		return new Soluzione(tipo,id, via, newNumCiv, comune, newValore, newPiano, newGiardino);
	}

Vi prego aiutatemi!!!!!

2 Risposte

  • Re: Controllo su file tramite Scanner

    Il metodo hasNext(String pattern) NON fa avanzare la lettura. Da documentazione:

    Returns true if the next token matches the pattern constructed from the specified string. The scanner does not advance past any input.

    Di conseguenza, quando poi invochi il read() statico della classe Soluzione, avrai per forza di cose un null come ritorno, visto che la prima riga di quel metodo dice “se esiste una prossima riga ritorna null”. Ovvio che esiste una prossima riga… è quella che hai verificato matchare con “indipendente”.

    Tra l'altro, quel metodo non ha senso: ad ogni riga pretendi che non ne esista una successiva… e come li leggi i valori visto che se è soddisfatta esegui una nextLine()?

    if(sc.hasNextLine()) return null;   // Se c'è una riga successiva ritorna subito null
    String tipo=sc.nextLine();   // Leggi la riga successiva... ma come?? Non c'è.

    Il metodo read() della classe Soluzione va rivisto completamente.

  • Re: Controllo su file tramite Scanner

    Si lo so che non fa avanzare infatti dovevo solo fare un controllo poi mi sono reso conto che nel read non avevo messo ‘!’ 

    Dovevo mettere un if( !sc.hasnextline())

    Comunque grazie mille per la risposta

Devi accedere o registrarti per scrivere nel forum
2 risposte